這涉及到C++的函數重載的概念。
當編譯器看到sqrt(4)的時候,它會試圖去找一個sqrt(int)的函數,可是找不到。
因而退而求其次,找一個能夠從int轉換過去的sqrt,結果一下找到了兩個,一個是sqrt(long double),另外一個是sqrt(float)。編譯器認爲把int轉換成long double或者float都很合理,因而編譯器就暈菜了,不知道程序員的真正意圖究竟是要用哪個,只好停下來請示,要求程序員明確指定其中一個。
sqrt(4.0)就不存在這個問題,由於4.0不是int,編譯器不須要作轉換,直接用對應的就好了。程序員
sqrtf(4)沒問題,是由於sqrtf只有一個函數原型sqrtf(float),編譯器沒有任何其它選擇,就很高興的直接把int轉換成float了。函數
若是是sqrt( 4.0 )就不會有錯了,或者是用sqrtf( 4 )都行原型