请注意,此函数没有“{”和“}”主体。只是一个 try/catch 块:
void func( void )
try
{
...
}
catch(...)
{
...
}
这是有意成为 C++ 的一部分,还是 g++ 扩展?
除了绕过 {} 的 1 级之外,还有其他目的吗?
在遇到http://stupefydeveloper.blogspot.com/2008/10/c-function-try-catch-block.html之前我从来没有听说过这个
请注意,此函数没有“{”和“}”主体。只是一个 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;
像你展示的那样从一个 catch 块(实际上我最近才发现)。但在这种情况下,我可能会使用另一层大括号并将 try/catch 放在函数中。大多数 C++ 程序员会更熟悉它。
另一个目的是捕获构造函数初始化列表抛出的异常,它使用类似的语法:
struct f {
g member;
f() try {
// empty
} catch(...) {
std::cerr << "thrown from constructor of g";
}
};
是的,这是标准的。函数 try 块,因为它们被称为,对常规函数没有太多用处,但对于构造函数,它们允许您捕获在初始化列表中抛出的异常。
请注意,在构造函数的情况下,异常将始终在任何 catch 块的末尾重新抛出。