auto 和 auto& 和 const

auto and auto& and const

auto x1 = exp1;
auto& x2 = exp2;

我是否理解正确,用 auto (x1) 声明的变量永远不会是 const,即使 exp1const(例如,一个函数returns const)。如果 exp2 为常量,则 auto&(x2) 将为常量。即使 auto 是一个指针。

auto it = find(cont.cbegin(), cont.cend(), value);

这里尽管我使用了 cbegin 和 cend 它将是非常量迭代器,并且要成为 const_iterator 我应该写

const auto it1 = find(cont.cbegin(), cont.cend(), value);

Do I understand correctly that variables declared with auto (x1) will never be const

正确。

When with auto&(x2) will be const if exp2 will be const.

引用永远不会是常量;参考文献不能是 cv 限定的。 x2 可以是对 const.

的引用
auto it = find(cont.cbegin(), cont.cend(), value);

Here despite I use cbegin and cend it will be non-const iterator

it 将是 const_iterator 类型的非常量限定对象。

const auto it1 = find(cont.cbegin(), cont.cend(), value);

it1 将是 const_iterator 类型的 const 限定对象。

通过 const_iterator(通常)间接为您提供对 const 的引用,因此您无法修改指向的对象。

const 对象不能(通常)被修改。因此,例如,您不能递增 const 限定的迭代器。