int main()
{
int a = 10;
const int &b = a;
int &c = b; //gives error : C should a reference to a const b
auto d = b; // why const is ignored here?
d = 15;
cout << a << d;
}
在c ++ Primer中,它提到&#34; const in reference type始终是低级&#34;那么auto d = b
怎么不恒定?
答案 0 :(得分:4)
因为auto
的类型推导规则推导为对象类型。您正在复制int
引用的新b
的初始化。
这是设计的。我们希望创建新的对象,而无需明确指定其类型。而且通常情况下,它是一个新对象,是一个其他对象的副本。如果它被推断为参考,它将失去预期的目的。
如果您希望在初始值设定项为引用时将推断类型作为引用,那么可以使用decltype(auto)
的占位符来完成:
decltype(auto) d = b; // d and b now refer to the same object
d = 15; // And this will error because the cv-qualifiers are the same as b's
答案 1 :(得分:1)
对于auto d = b
,您声明d
为非参考。这意味着d
将是从b
复制的新对象,然后b
的引用部分将被忽略,之后,const-ness也会被忽略。因此d
的类型为int
。
您可以明确声明d
作为参考,然后忽略b
的常量。 e.g。
auto& d = b; // the type of d is const int &
答案 2 :(得分:0)
因为扣除的类型是int
,而不是int&
。
这意味着d
不是参考。