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)