C++11 "auto" 关键字是否检索 "cv-qualifier" ?我有冲突样本
Does C++11 "auto" keyword retrieve "cv-qualifier" at all? I've got conflict samples
据说 "auto" 不检索 cv-qualifier,所以我做了一个实验:
const int i = 0;
auto r1 = i;
auto& r2 = i;
r1 = 3;//ok
r2= 3;//compilation error
好像在构造一个值的时候,cv-qualifier没有和new变量一起使用,而是和引用“&”一起使用,cv-qualifier是和它一起的。为什么会这样,自动检索 "cv-qualifier" 吗?
在大多数情况下,auto
推导与模板推导相同。仅 auto
删除所有 cv-限定符,但 auto&
保留引用类型的 cv-限定符。如果 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>
因为 r2
是对 const int
的引用,您不能给它赋值。但是 r1
只是 i
的副本。
据说 "auto" 不检索 cv-qualifier,所以我做了一个实验:
const int i = 0;
auto r1 = i;
auto& r2 = i;
r1 = 3;//ok
r2= 3;//compilation error
好像在构造一个值的时候,cv-qualifier没有和new变量一起使用,而是和引用“&”一起使用,cv-qualifier是和它一起的。为什么会这样,自动检索 "cv-qualifier" 吗?
auto
推导与模板推导相同。仅 auto
删除所有 cv-限定符,但 auto&
保留引用类型的 cv-限定符。如果 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>
因为 r2
是对 const int
的引用,您不能给它赋值。但是 r1
只是 i
的副本。