如果我只想按对象公开常量迭代器:
class MyList
{
public:
const_iterator begin() const;
const_iterator end() const;
private:
iterator begin();
iterator end();
};
看来我应该能够使用基于的范围的常量版本
MyList list;
...
for(const auto & value : list)
{
}
编译器抱怨begin
和end
是私有的。为什么不使用const_iterator
版本?
重载解析是在访问检查之前完成的,以避免仅仅通过更改访问说明符就神奇地破坏代码。
表达式(其类型)之后发生的情况将被忽略。如果需要,编译器将尝试在之后找到一个有效且明确的转换序列。
因此,选择了非const
-对象的begin
和end
,然后编译器会碰到那个大的private
-符号。