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

Ale*_*son 5 c++ iterator constants auto c++11

如果我只想按对象公开一个 const 迭代器:

class MyList
{
  public:
    const_iterator begin() const;
    const_iterator end() const;
  private:
    iterator begin();
    iterator end();
};
Run Code Online (Sandbox Code Playgroud)

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

MyList list;
...
for(const auto & value : list)
{
}
Run Code Online (Sandbox Code Playgroud)

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

Ded*_*tor 6

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

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

因此,beginend用于非const-object被选择,然后用该大编译器绊private-sign。