函数重载二义性

二义性就是有两个意义,两个意义都合理。这种问题在C++语言中会有发生,像函数重载时就有可能会发生二义性问题。写一段代码来让大家能清楚的理解函数重载二义性。


代码中,函数在调用时,出现了两个重载二义性。

第一个是因为参数类型编译器不知如何选择,

i是int类型,f是float类型,编译Add函数时编译器就没有办法作出选择调用哪个函数。修改方式就是在调用时显示做下类型转换。改成如下就没有二义性问题。

第二个是因为有了默认参数,编译器也不能确定具体调用哪个函数。

d是double类型,编译Add函数时编译器就没有办法作出选择调用哪个函数。这类二义性就只能程序员在设计时不要制造出来。比如定义Add函数有重载时,就不要加默认参数,或是函数有默认参数就不要设计成重载。

以上只是举函数重载方面的二义性问题,还有别的特性也会有二义性产生,比如继承。对于二义性问题编译器是没有办法优化的了,这类问题只能在程序设计时就避免掉,不要有二义性产生。