出于测试原因,我想在我的 C++ 代码中除以零。我写了这段代码:
int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;
我看到屏幕上打印了“int =9”,但应用程序没有崩溃。是因为一些编译器优化(我用 gcc 编译)吗?可能是什么原因?
出于测试原因,我想在我的 C++ 代码中除以零。我写了这段代码:
int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;
我看到屏幕上打印了“int =9”,但应用程序没有崩溃。是因为一些编译器优化(我用 gcc 编译)吗?可能是什么原因?
制作变量volatile
。对 volatile 变量的读取和写入被认为是可观察的:
volatile x = 1;
volatile y = 0;
volatile z = x / y;
因为y
没有被使用,所以它正在被优化掉。
尝试cout << y
在末尾添加一个。
或者,您可以关闭优化:
gcc -O0 file.cpp
除以零是未定义的行为。不崩溃也几乎是未定义行为领域中潜在无限数量的可能行为的适当子集。
Typically, a divide by zero will throw an exception. If it is unhandled, it will break the program, but it will not crash.