当前位置: 首页 > 知识库问答 >
问题:

从std::元组引用绑定的类型[重复]

越福
2023-03-14

这里的a是什么类型?

#include <iostream>
#include <tuple>

using namespace std;

int main()
{
    float x{};
    std::tuple<int> tpl( x );
    auto& [ a ] = tpl;
    static_assert( std::is_same_v< decltype( a ), int> );
    //static_assert( std::is_same_v< decltype( a ), int&> );
}

根据标准11.5/3:

[...] 给定由std::tuple_元素指定的类型Ti

这里,i是第一个元素(int)的0,而Estd::元组


共有2个答案

淳于博文
2023-03-14

注意事项

引用的类型是Ti。

对于结构化绑定,dectype产生引用类型([dcl.type.decltype]):

如果e是命名结构化绑定的未限定id表达式,decltype(e)是结构化绑定声明规范中给出的引用类型;

印成天
2023-03-14

变量r0的类型确实是int

所以我们需要看看[dcl.type.decltype]中对decltype的描述:

对于表达式e,由decltype(e)表示的类型定义如下:

  • 如果e是命名结构化绑定的未限定id表达式,decltype(e)是结构化绑定声明规范中给出的引用类型

所以这里的“引用类型”只是int

当然,dectype(a))int

 类似资料:
  • 当我尝试构建上述代码时,gcc给出了以下错误消息。 测验cpp:34:80:错误:从类型“void(派生:)()const”转换为类型“vood(派生:())(int)const”的static_ 自动函数6 = std::bind(static_cast( 我想知道是否有任何方法可以通过类(在这里成功绑定来绑定。感谢您的帮助。

  • 我有一个有界泛型类,我们称之为泛型,它的参数T扩展了抽象类abstract: 泛型类: 抽象类 泛型类中T引用的类 当尝试引用方法 getMap() 时,该方法来自 T 边界内的类(并且根据抽象类定义,T 的所有可能实例都将具有该方法),我收到以下错误: 不能从静态上下文引用非静态方法getMap() 然而,任何地方都没有静态关键字。我错过了什么?? 谢谢!

  • 我正在尝试将type-ahead http示例添加到我的项目(ng-bootstrap)中。我只是简单地复制了typeahead-http、html和typescript文件。然后我更改了app.module.ts以包含ahead文件类型: 我已经将NgbdTypeaheadHttp添加到声明列表中,并将WikipediaService添加到提供程序中,但我仍然得到以下错误: 异常:调用节点模块失

  • 错误:无法将类型为“std::_bit_reference&”的非常量lvalue引用绑定到类型为“std::vector::reference”{aka“std::_bit_reference”}的rvalue 因此,它抱怨,因为只有第二个参数是rvalue

  • 例如,假设我们有: 如果我这样做: 我总是得到0或1,因为它会搜索与值匹配的第一个匹配项。我如何精确地通过索引引用数组中的元素?也就是说,在这种情况下如何获得“0、1、2、3、4”?或者甚至使用多个维度的数组。