2016-06-09 71 views
1

給出的例子:int爲什麼變窄?

#include <iostream> 

void foo(float) {} 

int main() 
{ 
    int i{43}; 
    foo(float{i}); 

    return 0; 
} 

編譯器(鐺,MSVC)不編譯這個(GCC編譯,但警告):non-constant-expression cannot be narrowed from 'int' to 'float' in initializer list

爲什麼編譯器說int收窄floatfloatint

回答

3

也就是說,因爲浮子,這是隻有7位數的精度,儘管它具有更大範圍比INT。

所以,如果你嘗試用7位以上的精度來表示int數,那麼你的可能可能會有一些損失。 - 在這個意義上,它被稱爲縮小了。雖然浮點數有較寬範圍比int,但它有較少精度。

此外,浮點表示是近似 - 也就是說,它並不代表確切數(除2的冪)。從這個意義上說,整數也縮小了。

+0

如果轉換爲'double',儘管在普通實現中'double'具有比'int'更高的精度,那麼您會得到相同的錯誤。 – interjay

+0

由於浮點的不精確性,你說? – Ian

+0

在任何可能使用的平臺上,'double'都可以精確地表示每個'int'值(不是近似值,而是精確值)。但是該標準仍然稱這個縮小,因爲它不知道你在運行這個平臺。請參閱重複以獲取更多信息。 – interjay