0除以0在g++10.2中得到1
gcc says: 0 / 0 equals 1使用g++10.2编译时打印以下代码:
#include <iostream>
int main() {
int a = 0;
std::cout << "gcc says: 0 / 0 equals " << (a / a) << std::endl;
return 0;
}
在 Godbolt 上运行它
- 应该是这样吗?(编译
clang并执行它返回 136 - 错误的算术运算)。 - 这是某种代码优化的结果吗?
- 有没有办法使这个错误?
编辑:有编译-fsanitize=undefined品牌g++产生一个运行时错误。感谢@chris。
回答
除以零是未定义的行为。编译器将继续做任何使代码运行最快的事情。它甚至不会一致。
没有办法使这个结果导致编译器错误,因为编译器在编译时并不总是知道分母是否为 0。您必须自己进行检查。