声明规则定义了lvalue或prvalue
decltype rules define lvalue or prvalue
exltype语句定义类型取决于其参数:
- 表达类别是lvalue,然后声明产生t&;;
- 如果表达式的值类别为prvalue,则声明会产生t。
在这里有什么区别以及额外的括号如何工作?
双括号如何使LVALUE类别?
int a = 0;
decltype (a) b = a;
cout << is_same<decltype(b), int>::value << 'n';
decltype ((a)) c = a;
cout << is_same<decltype(c), int&>::value << 'n';
decltype
有一些奇怪的规则,可以使您能够完全表达 您想要的。
如果decltype
中的表达式是变量/函数的名称(aka aka a id-expression (,则结果类型是该变量/函数的类型。
否则,如果表达式是其他的,并且它是T
类型的LVALUE,则结果类型为T&
,或者如果其类型为T
,则结果类型为T
。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 返回指向对象的指针的函数调用是否为 prvalue?
- 一元*运算符的操作数是否期望一个 prvalue
- 为什么这些代码仍然使用 lvalue 函数?
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- 使用 prvalue 创建shared_pointer
- 初始化声明符是 prvalue 表达式吗?
- "expression must be a modifiable lvalue"是什么意思?
- C++指针算术"lvalue required as left operand of assignment"错误
- 未执行lvalue到rvalue转换
- RVALUE参考与const lVALUE参考作为参数之间的混淆
- 声明规则定义了lvalue或prvalue
- 错误:无法将"std::istream {aka std::basic_istream<char>}"lvalue 绑定到"std::basic_istream&<char>&
- 与构造函数中rvalue结合的非const lvalue有关的错误
- RVALUE参考与LVALUE结合
- 移动lvalue语义
- 为什么在提到 prvalue 时,它在这里使用术语"object"?
- 重载运算符 [] 并且没有收到"lvalue required as left operand of assignment"错误
- 使用强制转换时prvalue和lvalue之间的差异