//assume there is no Print(double dValue)
void Print(unsigned int nValue);
void Print(float fValue);
Print(3.14159);
不应该Print(3.14159)
与Print(float)
匹配吗?
而不是它,此代码导致模糊匹配
3.14159
是double
?float
和double
?答案 0 :(得分:3)
3.14159
是双倍的吗?
是的,是的。
如何区分
float
和double
?
使用3.14159f
将常量设为float
。使用3.14159
将常量设为double
。
答案 1 :(得分:1)
3.14159
数字文字是double
,而不是float
。 C ++有两个选择:
double
转换为unsigned int
,并调用第一个重载double
转换为float
,然后调用第二次重载两种选择都需要相同数量的转换,因此C ++会发出错误。
您可以通过将F
附加到文字的末尾来解决此问题:
Print(3.14159F);
// ^
现在,第一个选择仍需要进行float
到unsigned int
转换,而第二个选择可以继续进行转换;因此,第二次超载"胜出"。