为什么ideone.com这样做?

时间:2017-08-09 09:50:47

标签: c++ exception runtimeexception

我最近试图在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表现如此?它是编译器或其他程序中的错误吗?

1 个答案:

答案 0 :(得分:5)

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

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

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