以下内容来自林锐的《高质量C++编程指南》
示例 8-1-3 中,第一个output函数的参数是int类型,第二个output函数的参数是float类型。由于数字本身没有类型,将数字当作参数时将自动进行类型转换(称为隐式类型转换)。语句output(0.5)将产生编译错误,因为编译器不知道该将0.5转换成int还是float类型的参数。隐式类型转换在很多地方可以简化程序的书写,但是也可能留下隐患。
# include <iostream.h> void output( int x); // 函数声明 void output( float x); // 函数声明
void output( int x) { cout << " output int " << x << endl ; }
void output( float x) { cout << " output float " << x << endl ; }
void main(void) { int x = 1; float y = 1.0; output(x); // output int 1 output(y); // output float 1 output(1); // output int 1 // output(0.5); // error! ambiguous call, 因为自动类型转换 output(int(0.5)); // output int 0 output(float(0.5)); // output float 0.5 } |
示例 8-1-3 隐式类型转换导致重载函数产生二义性