声明规则定义了lvalue或prvalue

decltype rules define lvalue or prvalue

本文关键字:prvalue lvalue 规则 定义 声明      更新时间:2023-10-16

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