如何实现const_auto,因为C++ 11缺少它?

thb*_*thb 3 c++ const-iterator auto c++11

autoC++ 11 的类型很方便,所以现在也想要一个const_auto类型.例如,假设std::list<T> a;,如果

auto p = a.begin();
Run Code Online (Sandbox Code Playgroud)

有类型std::list<T>::iterator,然后有人希望

const_auto p = a.begin();
Run Code Online (Sandbox Code Playgroud)

有类型std::list<T>::const_iterator.不幸的是,C++ 11似乎没有听说过const_auto.因此,如何才能以良好的风格达到理想的效果呢?

(有关信息,请在此处提出并回答相关问题.)

Ben*_*nRI 13

C++ 11确实允许你编写

const auto p = a.begin();
Run Code Online (Sandbox Code Playgroud)

但是,这并不是你想要的.这使得常量迭代器成为非常量数据,其值无法更改.

右侧a.begin()的类型a取决于左侧的类型,而不是左侧的任何类型.如果a是非const,那么a.begin()将调用非const版本.所以,你可以a转换为const&然后使用它,或者你可以对a进行常量引用并使用它:

const auto& b = a;
auto p = b.begin();
Run Code Online (Sandbox Code Playgroud)

但是,更简单的方法是使用新引入的.cbegin()和.cend():

auto p = a.cbegin();
Run Code Online (Sandbox Code Playgroud)