//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
?
//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
?是
3.14159
雙?
是的。
如何區分
float
和double
?
使用3.14159f
使常數爲float
。使用3.14159
使常數爲double
。
3.14159
數字文本是一個double
,而不是一個float
。 C++有兩種選擇:
double
到unsigned int
,並調用所述第一過載double
到float
,並調用第二過載兩種選擇所需要的相同的轉換次數,至C++發佈錯誤。
您可以通過附加F
字面的最後解決這個問題:
Print(3.14159F);
// ^
現在的第一選擇仍然需要float
到unsigned int
轉換,而第二選擇,無需轉換即可進行;因此,第二次超載「勝利」。
你是什麼意思與模糊匹配?你有編譯器錯誤或奇怪的行爲? – gcswoosh 2015-04-05 00:45:14
看看這個:http://stackoverflow.com/questions/2386772/difference-between-float-and-double – sam 2015-04-05 00:45:52