当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《你真的有一个没有身体但只是一个try/catch块的函数/方法吗?》经验,为你挑选了3个好方法。

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

void func( void )
try
{
    ...
}
catch(...)
{
    ...
}

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

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

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



1> Johannes Sch..:

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

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

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



2> James Hopkin..:

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

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



3> SCFrench..:

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

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有