Is the casting of infinity (represented by float) to an integer an undefined behavior?
The standard says:
4.10 Floating-integral conversions
A prvalue of a floating point type can be converted to a prvalue of an
integer type. The conversion truncates; that is, the fractional part
is discarded. The behavior is undefined if the truncated value cannot
be represented in the destination type.
but I can't tell whether "truncated value cannot be represented" covers infinity.
I'm trying to understand why std::numeric_limits<int>::infinity()
and static_cast<int>(std::numeric_limits<float>::infinity() )
have different results.
#include <iostream>
#include <limits>
int main ()
{
std::cout << std::numeric_limits<int>::infinity () << std::endl;
std::cout << static_cast<int> (std::numeric_limits<float>::infinity () ) << std::endl;
return 0;
}
Output:
0
-2147483648
The result of std::numeric_limits<int>::infinity()
is well defined and equal to 0
, but I can't find any information about casting infinity.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…