为什么基于常量范围不用于使用const_iterator?



如果我只想按对象公开常量迭代器:

class MyList
{
  public:
    const_iterator begin() const;
    const_iterator end() const;
  private:
    iterator begin();
    iterator end();
};

看来我应该能够使用基于的范围的常量版本

MyList list;
...
for(const auto & value : list)
{
}

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

重载解析是在访问检查之前完成的,以避免仅仅通过更改访问说明符就神奇地破坏代码。

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

因此,选择了非const-对象的beginend,然后编译器会碰到那个大的private-符号。

最新更新