转载自《Exceptional C++ style》
#include <complex>
class Calc
{
public:
double Twice(double);
private:
int Twice(int i);
std::complex<float> Twice(std::complex<float c>);
};
int main()
{
Calc c;
c.Twice(21); //编译出错,Twice(int) 不可访问
}
编译器在对函数决议时主要做三件事:
(1)名字查找:编译器会首先寻找至少包含一个名为Twice的实体作用域,并将其放入候选实体列表。本例中,编译器的名字查找首先是从Calc的作用域中开始,编译器会查看Calc中是否至少存在一个名为Twice的成员,如果没有,就会继续依次在其基类和外围空间中查找,直到找到一个至少具有一个候选函数的作用域。本例中在第一个作用域中找到三个候选函数。
(2)重载决议。编译器在候选的重载函数中选出唯一的最佳匹配。因为c.Twice(21)参数是21int,所以最佳匹配是Twice(int)。注:如果编译器在函数匹配中找不到最佳的匹配就会产生二义性,编译报错
(3)可访问性检查。最后编译器会检查函数的可访问性,因为Twice(int)是private,不可访问
总结:函数重载,匹配性比可访问性更重要
原文链接: https://www.cnblogs.com/dj0325/p/12441980.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194102
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!