doubleをintにキャストしたが、doubleの値が範囲外の場合はどうなりますか?doubleをintにキャストしたが、doubleの値が範囲外の場合はどうなりますか?
私はこのようなことをしますか?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
aの値は?それは未定義ですか?
doubleをintにキャストしたが、doubleの値が範囲外の場合はどうなりますか?doubleをintにキャストしたが、doubleの値が範囲外の場合はどうなりますか?
私はこのようなことをしますか?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
aの値は?それは未定義ですか?
正確に。標準から引用すると、 "切り捨てられた値を宛先タイプで表現できない場合の動作は未定義です。"
David Thornleyがこの質問に完全に答えました。しかし、あなたのコードでこの状況に対処するには、boost's numeric_castを考慮する必要があります。
double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);
d
がint
ため大きすぎる場合、これは、実行時に例外がスローされます。