请注意,此功能没有“{”和“}”正文。只是一个try / catch块:
void func( void )
try
{
...
}
catch(...)
{
...
}
这是故意成为C ++的一部分,还是这是一个g ++扩展?
除了绕过1级{}之外,还有其他目的吗?
在我遇到http://stupefydeveloper.blogspot.com/2008/10/c-function-try-catch-block.html
之前,我从未听说过这个答案 0 :(得分:9)
是的,这是有效的C ++。我发现它的一个目的是将异常转换为返回值,并让代码将返回值中的异常与函数中的其他代码分开。是的,你可以return x;
来自一个像你所展示的那个(我最近才发现的那个)。但我可能只是使用另一个级别的大括号,并在这种情况下将try / catch放在函数内部。对大多数C ++程序员来说,它会更为熟悉。
另一个目的是捕获构造函数初始化列表抛出的异常,它使用类似的语法:
struct f {
g member;
f() try {
// empty
} catch(...) {
std::cerr << "thrown from constructor of g";
}
};
答案 1 :(得分:4)
是的,这是标准的。函数try块,因为它们被调用,对常规函数没有多大用处,但对于构造函数,它们允许您捕获初始化列表中抛出的异常。
请注意,在构造函数的情况下,异常将始终在任何catch块的末尾重新抛出。
答案 2 :(得分:3)
Herb Sutter有一篇很好的文章:http://www.gotw.ca/gotw/066.htm。