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
是收窄到float
時float
比int
寬?
如果轉換爲'double',儘管在普通實現中'double'具有比'int'更高的精度,那麼您會得到相同的錯誤。 – interjay
由於浮點的不精確性,你說? – Ian
在任何可能使用的平臺上,'double'都可以精確地表示每個'int'值(不是近似值,而是精確值)。但是該標準仍然稱這個縮小,因爲它不知道你在運行這個平臺。請參閱重複以獲取更多信息。 – interjay