class overload
{
void func(int x)
{
cout<<"pass by value\n";
}
public:void func(int &x)
{
cout<<"pass by reference\n";
}
};
main()
{
overload b1;
b1.func(10);
}
我已经将一个函数设为私有而另一个函数具有相同的名称public.now在main中只有一个函数是可见的,那么为什么编译器在我尝试访问此函数时会出现歧义错误?
答案 0 :(得分:1)
在检查功能的访问权限之前执行过载分辨率。一个是private
是无关紧要的 - 重载决议仍然是模棱两可的。
答案 1 :(得分:1)
在访问控制之前完成过载分辨率。编译器找到名为func()
的所有函数,并尝试解析为最可行的重载。在那个阶段没有考虑到可见性。