2015-04-05 79 views
0
//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
  • 如何區分floatdouble
+0

你是什麼意思與模糊匹配?你有編譯器錯誤或奇怪的行爲? – gcswoosh 2015-04-05 00:45:14

+0

看看這個:http://stackoverflow.com/questions/2386772/difference-between-float-and-double – sam 2015-04-05 00:45:52

回答

3

3.14159雙?

是的。

如何區分floatdouble

使用3.14159f使常數爲float。使用3.14159使常數爲double

1

3.14159數字文本是一個double,而不是一個float。 C++有兩種選擇:

  • 轉換doubleunsigned int,並調用所述第一過載
  • 轉換doublefloat,並調用第二過載

兩種選擇所需要的相同的轉換次數,至C++發佈錯誤。

您可以通過附加F字面的最後解決這個問題:

Print(3.14159F); 
//   ^

現在的第一選擇仍然需要floatunsigned int轉換,而第二選擇,無需轉換即可進行;因此,第二次超載「勝利」。