auto
C++11 的类型很方便,所以现在需要一个 const_auto
也打字。例如,假设 std::list<T> a;
, 如果
auto p = a.begin();
具有类型 std::list<T>::iterator
,那么人们希望
const_auto p = a.begin();
有类型 std::list<T>::const_iterator
.不幸的是,C++11 似乎没有听说过const_auto
。 .因此,请问如何才能以好的风格达到预期的效果?
最佳答案
C++11 允许你写
const auto p = a.begin();
但是,这并不能满足您的要求。这使得一个常规迭代器指向其值无法更改的非常量数据。
右侧 a.begin()
的类型由 a
的类型决定,而不是由左侧的任何内容决定。如果 a 是非常量,则 a.begin()
的非常量版本将被调用。因此,您可以将 a
转换为 const& 然后使用它,或者您可以对 a 进行常量引用并使用它:
const auto& b = a;
auto p = b.begin();
但是,更简单的方法是使用新引入的 .cbegin() 和 .cend():
auto p = a.cbegin();
关于c++ - 如何实现 const_auto,因为 C++11 缺少它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246424/