[英]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.