ideone.com 为什么要这样做?



我最近试图在 ideone.com 中运行这段代码...

#include <iostream>
#include <string>
using namespace std;
int getVal(string name)
{
if (name == "Devashish") return 0;
return 1;
}
int main()
{
cout << 5 / getVal("Devashish");
return 0;
}

有趣的是,这段代码没有抛出任何异常,并在输出中打印了 5。有意编写代码以生成异常。这是成功编译和执行错误代码的ideone链接:http://ideone.com/ogDzDU

当我尝试在Visual Studio上执行相同的代码时,我遇到了异常(这是意料之中的(。只是好奇。为什么 ideone 会表现得如此?这是他们的编译器或其他程序中的错误吗?

在C++程序中除以零具有严格未定义的行为。

这意味着没有人可以说你的程序将如何运行。它可能会引发异常,但不能保证它会引发异常。它也可以顺利运行,让你感到困惑,就像你现在一样。

这就是UB的本质。你绝对不应该在你的代码中使用UB,因为只有这样你才能推理它。但是,通过不定义行为,C++标准为实现提供了巨大的优化机会。他们不需要不断添加检查,当我们作为程序员犯错时引发异常。

相关内容

最新更新