读书人

C++两义性有关问题

发布时间: 2012-09-14 23:00:49 作者: rapoo

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).这里不用考虑。


读书人网 >C++

热点推荐