我有一个程序:
#include<iostream>
using namespace std;
class Test
{
public:
void func()
{
cout << "Inside func" << endl;
throw;
}
};
int myfunc()
{
Test T;
T.func();
return 1;
}
int main()
{
myfunc();
cout << "Main func" << endl;//should not print
getchar();
}
Run Code Online (Sandbox Code Playgroud)
我的期望是这个程序将终止main,但在VC++ 2015上,main cout它正在打印.这违背了我的理解,所以我编译了它gcc它在那里工作正常.
这是VC++ 2015中的错误还是程序终止的行为,这是未指定的/ UB行为?它应该执行cout << "Main func" << endl;吗?
IDE:VS2015 CTP Ultimate预览版(30天)
标志: /GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc140.pdb" /fp:precise /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\exception.pch"
throw没有参数,当在不正确的上下文中调用时,应该调用terminate.
根据标准:
一个抛出表达式,没有操作重新抛出当前处理的例外
....
如果当前没有处理异常,则执行不带操作数调用的throw-expression
std::terminate()
然后行为取决于当前安装std::terminate_handler,但无论如何执行应该终止.
必需的行为:A
terminate_handler应终止程序的执行而不返回调用者.默认行为:实现的默认
terminate_handler调用abort.默认实现调用std::abort.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |