【发布时间】:2014-10-24 19:05:57
【问题描述】:
如果我只想按对象公开一个 const 迭代器:
class MyList
{
public:
const_iterator begin() const;
const_iterator end() const;
private:
iterator begin();
iterator end();
};
看来我应该能够使用基于范围的 const 版本:
MyList list;
...
for(const auto & value : list)
{
}
编译器抱怨begin 和end 是私有的。为什么不使用const_iterator 版本?
【问题讨论】:
-
template <class T> T const& as_const(T const& t) { return t; }....for (auto& value : as_const(list)) ... -
这是一个对用户不友好的设计,因为你不能再做
MyList list; list.begin();。考虑将私有非常量版本重命名为其他版本。 -
我同意,但这只是对用户不友好,因为编译器拒绝找到 begin/end 的 const 版本。
标签: c++ c++11 iterator constants auto