为什么const范围不是基于使用const_iterator?

时间:2014-10-24 19:05:57

标签: c++ c++11 iterator const auto

如果我只想通过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)
{
}

编译器抱怨beginend是私有的。为什么它不使用const_iterator版本?

1 个答案:

答案 0 :(得分:4)

重载解析在访问检查之前完成,以避免仅通过更改访问指定符来神奇地破坏代码。

之后的表达式(其类型)会被忽略。如果需要,编译器将尝试在之后找到有效且明确的转换序列。

因此,选择了非begin - 对象的endconst,然后编译器偶然发现了那个大的private - 符号。