摘要:
总结一下今天学到的容易出现二义性问题的地方
1、类在重载函数时容易出现二义性,当出现二义性时,编译器会调用最佳的匹配函数,当时如果找不到的话,就会出错,比如说我们重载了这样的函数:
void emp(int,int);
void emp(double,double );
然后有以下的调用:
int e1,e2;
double e3,e4;
emp(e1,e2);//OK
emp(e3,e4);//OK
emp(e3,e2);//error
以上的第一、二个是精确调用所以没问题,第三个调用,因为double型可以转换为int型,int也可以转换为double型,所以在调用时两个重载函数中找不到最佳的匹配函数,编译器不知道怎么转换,只有报错,
为了避免出现调用时的二义性,我们可以通过显式的强制类型转换指定调用类型,比如emp(static_cast(e3),e2);
阅读全文