C++ decltype规则定义左值或PR值

C++ decltype规则定义左值或PR值,c++,decltype,C++,Decltype,decltype语句定义其参数的类型: 表达式的类别是左值,然后decltype生成T& 如果表达式的值类别是prvalue,则decltype生成T 这里的区别是什么?额外的括号是如何工作的? 双括号如何构成左值范畴 int a = 0; decltype (a) b = a; cout << is_same<decltype(b), int>::value << '\n'; decltype ((a)) c = a; cout << is

decltype语句定义其参数的类型:

  • 表达式的类别是左值,然后decltype生成T&
  • 如果表达式的值类别是prvalue,则decltype生成T
这里的区别是什么?额外的括号是如何工作的?
双括号如何构成左值范畴

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';
inta=0;
decltype(a)b=a;

cout
decltype
有一些功能可以让您准确地表达您想要的内容

如果
decltype
中的表达式是变量/函数的名称(也称为id表达式),则生成的类型就是该变量/函数的类型

否则,如果表达式为任何其他类型且其左值类型为
T
,则生成的类型为
T&
,或者如果其PR值类型为
T
,则生成的类型为
T

,将“额外”括号解析为表达式。