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两个版本,算法都是可行的候选者,并且选择最佳匹配就像在其他重载决策情况下一样.没有魔法:)
| 归档时间: |
|
| 查看次数: |
4327 次 |
| 最近记录: |