decltype规则定义左值或右值

时间:2018-04-23 10:10:10

标签: c++ decltype

decltype语句定义类型取决于其参数:

  
      
  • 表达式的类别是左值,然后decltype产生T&amp ;;
  •   
  • 如果表达式的值类别是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';

1 个答案:

答案 0 :(得分:1)

decltype有一些wonky rules,可让您完全 表达您想要的内容。

如果decltype中的表达式是变量/函数的名称(又名 id-expression ),那么结果类型就是该变量/函数的类型。

否则,如果表达式是其他任何内容并且其类型为T的左值,则结果类型为T&,或者如果其类型为T的prvalue,则生成的类型为T