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';
答案 0 :(得分:1)
decltype
有一些wonky rules,可让您完全 表达您想要的内容。
如果decltype
中的表达式是变量/函数的名称(又名 id-expression ),那么结果类型就是该变量/函数的类型。
否则,如果表达式是其他任何内容并且其类型为T
的左值,则结果类型为T&
,或者如果其类型为T
的prvalue,则生成的类型为T
。