'const decltype((a))'不声明const引用?

时间:2015-06-16 14:59:53

标签: c++ c++11 decltype

今天我看到了一些像这样的代码:

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修饰符不生效?

1 个答案:

答案 0 :(得分:8)

错误的部分不正确,因为const已应用于int&的完整类型,而const添加到int&会使int& const const引用int 。但是引用的本质是const,因此const部分被忽略了。因此,结果类型仍为int&