【问题标题】:Does C++11 "auto" keyword retrieve "cv-qualifier" at all? I've got conflict samplesC ++ 11“auto”关键字是否完全检索“cv-qualifier”?我有冲突样本
【发布时间】:2016-07-28 02:22:51
【问题描述】:

据说“auto”没有检索到cv-qualifier,所以我做了一个实验:

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

好像在构造一个值的时候,cv-qualifier 不是和新变量一起使用的,而是和引用“&”一起使用,cv-qualifier 是和它一起的。为什么会这样,自动检索“cv-qualifier”吗?

【问题讨论】:

标签: c++ c++11 constants auto


【解决方案1】:

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-qualifications”部分是否有来源?我看到并使用了它,但很想知道它是否在 cpp 标准或参考中的某处指定。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 2012-08-24
  • 2023-03-31
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2015-03-31
相关资源
最近更新 更多