C++ C++;11“;“自动”;关键词检索";cv限定符“;完全I';我有冲突样本

C++ C++;11“;“自动”;关键词检索";cv限定符“;完全I';我有冲突样本,c++,c++11,constants,auto,C++,C++11,Constants,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&删

据说“自动”无法检索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&
删除了限定符,您将能够对常量对象进行非常量引用,这将是不好的!其工作原理与:

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

deduce(i);     // calls deduce<int>
deduce_ref(i); // calls deduce<int const>
模板推导(T);
模板推导_ref(T&);
推断(i);//电话推断
推导出(i);//电话推断

由于
r2
是对
const int
的引用,因此无法为其赋值。但是
r1
只是
i
的一个副本

引用:使用指针也会得到同样的效果。