区分浮动和双重

时间:2015-04-05 00:42:40

标签: c++ c++11 visual-c++

//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.14159double
  • 如何区分floatdouble

2 个答案:

答案 0 :(得分:3)

  

3.14159是双倍的吗?

是的,是的。

  

如何区分floatdouble

使用3.14159f将常量设为float。使用3.14159将常量设为double

答案 1 :(得分:1)

3.14159数字文字是double,而不是float。 C ++有两个选择:

  • double转换为unsigned int,并调用第一个重载
  • double转换为float,然后调用第二次重载

两种选择都需要相同数量的转换,因此C ++会发出错误。

您可以通过将F附加到文字的末尾来解决此问题:

Print(3.14159F);
//           ^

现在,第一个选择仍需要进行floatunsigned int转换,而第二个选择可以继续进行转换;因此,第二次超载"胜出"。