你真的有一个没有身体但只是一个try/catch块的函数/方法吗?

Sté*_*ane 13 c++ g++ try-catch

请注意,此函数没有"{"和"}"正文.只是一个try/catch块:

void func( void )
try
{
    ...
}
catch(...)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是故意的C++的一部分,还是这是一个g ++扩展?

除了绕过1级{}之外,还有什么目的吗?

在遇到http://stupefydeveloper.blogspot.com/2008/10/c-function-try-catch-block.html之前,我从未听说过这个.

Joh*_*itb 11

是的,这是有效的C++.我发现它的一个目的是将异常转换为返回值,并让代码将返回值中的异常与函数中的其他代码分开.是的,你可以return x;从你所展示的那个块中找到(我最近才发现,实际上).但我可能只是使用另一个级别的大括号​​,并在这种情况下将try/catch放在函数内部.对大多数C++程序员来说,它会更熟悉.

另一个目的是捕获构造函数初始化列表抛出的异常,它使用类似的语法:

struct f {
    g member;
    f() try { 
        // empty
    } catch(...) { 
        std::cerr << "thrown from constructor of g"; 
    }
};
Run Code Online (Sandbox Code Playgroud)


Jam*_*kin 9

是的,这是标准的。所谓的函数try块,对于常规函数而言并没有太多用处,但是对于构造函数而言,它们使您可以捕获在初始化程序列表中引发的异常。

请注意,在构造函数的情况下,总是在任何catch块的末尾重新抛出异常。


SCF*_*nch 5

Herb Sutter对此有很好的文章:http : //www.gotw.ca/gotw/066.htm