對於以下代碼,lval
被計算爲VS和gcc上的不同值。對VS和gcc計算的不同值
代碼:
const double val = std::numeric_limits<double>::max();
const unsigned long lval = (std::numeric_limits<decltype(val)>::infinity() == val || (static_cast<unsigned long>(val) >= 2)) ?
std::numeric_limits<unsigned long>::max() :
999;
cout << lval;
在Visual Studio中
lval
被計算爲999
http://rextester.com/EMFL77801
ON G ++
lval
計算出爲18446744073709551615
http://coliru.stacked-crooked.com/a/682c81bbe498ddc5
問題
爲什麼是這兩個值有什麼不同?
此外
我試圖在獨立GCC相同的代碼,並把一個斷點在gdb。我看到static_cast<unsigned long>(val) >= 2
評估以true
GDB上,但同樣的表達式評估爲在VS
我很確定從浮點到整數類型的轉換會導致後者的結果超出範圍 - 如在'static_cast(val)' - 中展示未定義的行爲。 –