如果我只想通过object公开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
版本?
答案 0 :(得分:4)
重载解析在访问检查之前完成,以避免仅通过更改访问指定符来神奇地破坏代码。
之后的表达式(其类型)会被忽略。如果需要,编译器将尝试在之后找到有效且明确的转换序列。
因此,选择了非begin
- 对象的end
和const
,然后编译器偶然发现了那个大的private
- 符号。