问题
What happens if I cast a double to an int, but the value of the double is out of range?
Lets say I do something like this?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
What is the value of a? Is it undefined?
回答1:
Precisely. Quoting from the Standard, 4.9, "The behavior is undefined if the truncated value cannot be represented in the destination type."
回答2:
David Thornley answered this question completely already. However to deal with this situation in your code you should consider boost's numeric_cast.
double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);
This will throw an exception at runtime if d
is too big for an int
.
来源:https://stackoverflow.com/questions/1161887/what-happens-if-i-cast-a-double-to-an-int-but-the-value-of-the-double-is-out-of