C++中的整数溢出和整数乘法
Integer overflow and Multiplication of integers in c++
int y ;
y = 7000000000*1.0;
这不会在 cpp 中给出错误
虽然
int y ;
y = 7000000000;
这会导致整数溢出
谁能解释一下这两种情况。
在您的 C++ 实现中,y = 7000000000*1.0
和 y = 7000000000
都会导致在转换期间溢出 int
中可表示的内容。对于从浮点类型到整数类型的转换,C++ 标准未定义此类溢出时的行为。对于从一种整数类型到另一种整数类型的转换,它是实现定义的。
但是,您的编译器在编译过程中会诊断后者,而无法诊断前者。这并不意味着前者没问题(不是),只是编译器不报告问题(C++ 标准不需要)。
int y ;
y = 7000000000*1.0;
这不会在 cpp 中给出错误
虽然
int y ;
y = 7000000000;
这会导致整数溢出
谁能解释一下这两种情况。
在您的 C++ 实现中,y = 7000000000*1.0
和 y = 7000000000
都会导致在转换期间溢出 int
中可表示的内容。对于从浮点类型到整数类型的转换,C++ 标准未定义此类溢出时的行为。对于从一种整数类型到另一种整数类型的转换,它是实现定义的。
但是,您的编译器在编译过程中会诊断后者,而无法诊断前者。这并不意味着前者没问题(不是),只是编译器不报告问题(C++ 标准不需要)。