C++ 11"auto"关键字是否会检索"cv-qualifier"?我有冲突样本

Tro*_*yvs 2 c++ const auto c++11

据说"auto"不会检索cv-qualifier,所以我做了一个实验:

const int i = 0;
auto r1 = i;
auto& r2 = i;
r1 = 3;//ok
r2= 3;//compilation error
Run Code Online (Sandbox Code Playgroud)

似乎在构造值时,cv-qualifier不是使用新变量,而是使用引用"&",cv-qualifier与它一起使用.为什么这样,自动检索"cv-qualifier"呢?

Bar*_*rry 6

auto对于大多数情况,演绎与模板演绎相同.只需auto删除所有cv -qualifiers,但auto&保持引用类型的cv -qualifications.如果auto&删除了限定符,你就可以对const对象进行非const引用,这很糟糕!这与以下方式完全相同:

template <class T> deduce(T );
template <class T> deduce_ref(T& );

deduce(i);     // calls deduce<int>
deduce_ref(i); // calls deduce<int const>
Run Code Online (Sandbox Code Playgroud)

由于r2是引用const int,您无法分配给它.但r1只是一份副本i.