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

Does C++11 "auto" keyword retrieve "cv-qualifier" at all? I've got conflict samples

本文关键字:冲突 样本 cv-qualifier auto 关键字 检索 C++11      更新时间:2023-10-16

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

const int i = 0;
auto r1 = i;
auto& r2 = i;
r1 = 3;//ok
r2= 3;//compilation error

似乎在构造值时,cv限定符不与新变量一起使用,而是与引用"&"一起使用,cv限制符与它一起使用。为什么,自动检索"cv限定词"?

auto推导在大多数情况下与模板推导相同。仅auto删除所有cv-限定符,但auto&保留引用类型的cv限定符。如果auto&删除了限定符,则可以对const对象进行非常量引用,这将是不好的!这与的工作方式完全相同

template <class T> deduce(T );
template <class T> deduce_ref(T& );
deduce(i);     // calls deduce<int>
deduce_ref(i); // calls deduce<int const>

由于r2是对const int的引用,所以不能分配给它。但r1只是i的副本。