use*_*782 4 c++ decltype c++11
我有点困惑为什么decltype逗号运算符在某些情况下返回引用类型.
例如,在此代码中:
int i = 101;
decltype(1, i) var = i;
var = 20;
printf("%d\n", i); // will print 20
Run Code Online (Sandbox Code Playgroud)
这里,var是int而不是int,但如果我用第二行替换:
decltype(i) var = i;
Run Code Online (Sandbox Code Playgroud)
它将返回int!
任何人都可以解释一下吗?
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&
Run Code Online (Sandbox Code Playgroud)
(i)并且1, i是左值表达式,因此它们decltype是引用类型.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |