C++两义性有关问题
C++两义性问题C/C++ code#include iostreamusing namespace stdclass Base1{public:void c(float)}cl
C++两义性问题
C/C++ code#include <iostream>using namespace std;class Base1{public:void c(float);};class Base2{public: void c();};class Dervied:public Base1,public Base2{};int main() { Dervied obj; obj.c(10); return 0;}
//基类1的C函数是有参数的,而基类2的C函数是无参数的。
//最后主函数中调用的是有参数的C函数,那么请问这个怎么也会有两义性?
[解决办法]Derived没有using重新声明c,于是Derived作用域内名称c的name lookup结果是Base1::c或Base2::c,有二义性。
注意是名称c,此时不用知道c是不是函数。也就是说在类型检查前,更在确定重载候选前。
至于访问权限,是指public之类的。ISO C++11 10.2/1 ... Name lookup takes place before access control (3.4, Clause 11).这里不用考虑。