我有点担心为什么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!
任何人都可以解释一下吗?
答案 0 :(得分:7)
decltype
是一种特殊情况下的无表情 id-expression ,用于提供实体的类型,没有参考资格 [dcl.type.simple] :
4 -
decltype(e)
表示的类型定义如下:
- 如果e
是未加密码的id-expression或未加括号的类成员访问(5.2.5),则decltype(e)
是由e
命名的实体的类型。 [...]
- 否则,如果e
是左值,则decltype(e)
为T&
,其中T
是e
的类型; [...]
通过提供逗号表达式,您将禁用此特殊情况,如括号:
decltype(i) // int
decltype((i)) // int&
decltype(1, i) // int&
(i)
和1, i
是左值表达式,因此他们的decltype
是引用类型。