const和非const函数的重载如何工作?

dav*_*vka 15 c++ overloading const

stl充满了这样的定义:

iterator begin ();
const_iterator begin () const;
Run Code Online (Sandbox Code Playgroud)

由于返回值不参与重载分辨率,因此这里唯一的区别就是函数的存在const.这是超载机制的一部分吗?什么是编译器解析线的算法,如:

vector<int>::const_iterator it = myvector.begin();
Run Code Online (Sandbox Code Playgroud)

Fle*_*exo 10

在您给出的示例中:

vector<int>::const_iterator it = myvector.begin();
Run Code Online (Sandbox Code Playgroud)

如果myvector不是const,begin()则将调用非const版本,并且您将依赖于从迭代器到const_iterator的隐式转换.


Arm*_*yan 10

编译器的"算法"是这样的:类X的每个成员函数都有一个X类型的隐式参数(我知道,大多数人认为它是X*,但标准状态,为了超载解析的目的,我们假设它是一个参考).对于const函数,参数的类型是const X&.因此,如果成员函数被称为const和非const两个版本,算法都是可行的候选者,并且选择最佳匹配就像在其他重载决策情况下一样.没有魔法:)