繁体   English   中英

为什么ideone.com这样做?

[英]Why ideone.com does this?

我最近试图在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上执行相同的代码时,出现了一个异常(这是预期的)。 只是好奇。 为什么二烯酮如此表现? 这是他们的编译器或其他程序中的错误吗?

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

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

那是UB的本质。 您绝对不应在代码中包含UB,因为只有这样您才能对此进行推理。 但是通过保留行为未定义,C ++标准为实现提供了巨大的优化机会。 当我们作为程序员大失所望时,他们不需要不断添加引发异常的检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM