今天我看到了一些像这样的代码:
int a = 0;
const decltype((a)) x = 10; // Error
const int b = 0;
decltype ((b)) y = 42; // Correct
我可以看到为什么正确的代码是正确的,但我不明白为什么错误的代码不正确。
我测试了它,发现它有点奇怪。
const decltype((a)) x = 10;
这应该定义const int&
权利?但它不编译! error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'
。
我将其更改为const decltype((a)) x = a;
然后编译。
嗯,x
是一个const引用吗?不,我发现它是一个非const引用。我可以通过a
修改x
的值。
为什么const
修饰符不生效?
答案 0 :(得分:8)
错误的部分不正确,因为const
已应用于int&
的完整类型,而const
添加到int&
会使int& const
const引用int 。但是引用的本质是const
,因此const部分被忽略了。因此,结果类型仍为int&