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