c ++ 11 decltype返回引用类型

时间:2014-08-07 15:37:45

标签: c++ c++11 decltype

我有点担心为什么decltype逗号运算符会在某些情况下返回引用类型。

例如,在此代码中:

int i = 101;
decltype(1, i) var = i;
var = 20;
printf("%d\n", i); // will print 20

这里,var是int&而不是int,但如果我用第二行代替:

decltype(i) var = i;

它将返回int!

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:7)

decltype是一种特殊情况下的无表情 id-expression ,用于提供实体的类型,没有参考资格 [dcl.type.simple]

  

4 - decltype(e)表示的类型定义如下:
   - 如果e是未加密码的id-expression或未加括号的类成员访问(5.2.5),则decltype(e)是由e命名的实体的类型。 [...]
   - 否则,如果e是左值,则decltype(e)T&,其中Te的类型; [...]

通过提供逗号表达式,您将禁用此特殊情况,如括号:

decltype(i)    // int
decltype((i))  // int&
decltype(1, i) // int&

(i)1, i是左值表达式,因此他们的decltype是引用类型。

相关问题