我正在使用 Microsoft Visual C++ 2010 如您所见,我有以下代码,其中我将 1 除以零
#include <cstdio>
int main()
{
int x;
x = 0;
1/x;
while (1) {
std::printf("RUNNING!!\n");
}
}
令人惊讶的是,我没有发现任何运行时错误,程序继续执行并显示 RUNNING!!
所以我的问题是为什么“1/x”不被视为运行时错误,为什么程序不停止?
最佳答案
相反,为什么您认为应该是运行时错误?没有规定强制执行此操作。
除以零是未定义。在这种情况下,似乎因为它可能在编译时被捕获,所以您的编译器只是简单地忽略了该操作……很可能是因为您从未使用过它的“结果”。
因此,该程序运行并可能不输出任何内容:
int main()
{
int x = 0;
1/x;
}
虽然我预计这个程序会导致系统级算术异常:
#include <iostream>
int main()
{
int x = 0;
int y = 1/x;
std::cout << y << '\n';
}
一般来说,当您有未定义的行为时,不要期待任何事情。不要指望你的程序能“工作”,不要指望它产生有意义的输出,不要指望它不会给你的前妻打电话并取消对你的宠物鸡的合法监护权,也不要指望它会导致你想要的错误。
关于c++ - 除以零后无运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29376100/