Dev*_*wal 0 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;
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这段代码没有抛出任何异常并在输出中打印5.有意编写代码以产生异常.以下是成功编译和执行错误代码的ideone链接:http://ideone.com/ogDzDU
当我尝试在Visual Studio上执行相同的代码时,我得到了一个异常(这是预期的).只是好奇.为什么ideone表现如此?它是编译器或其他程序中的错误吗?
在C++程序中除以零具有严格的未定义行为.
这意味着没有人能说出你的程序将如何表现.它可以引发异常,但不能保证它会.它也可以顺利运行,让你感到困惑,就像你现在一样.
这就是UB的本质.你绝对不应该在你的代码中使用UB,因为只有这样你才能推理它.但是,通过保持行为未定义,C++标准为实现提供了极大的优化机会.当我们作为程序员犯错时,他们不需要不断添加引发异常的检查.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |