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?
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?
Precisely. Quoting from the Standard, 4.9, "The behavior is undefined if the truncated value cannot be represented in the destination type."
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
.