代码之家  ›  专栏  ›  技术社区  ›  Stéphane

你真的可以有一个没有主体的函数/方法,而只是一个try/catch块吗?

  •  12
  • Stéphane  · 技术社区  · 17 年前

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

    这是C++的有意部分,还是G+扩展?

    我从来没有听说过这件事,直到我遇到 http://stupefydeveloper.blogspot.com/2008/10/c-function-try-catch-block.html

    3 回复  |  直到 17 年前
        1
  •  11
  •   Johannes Schaub - litb    17 年前

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

    另一个目的是捕获构造函数初始值设定项列表引发的异常,该列表使用类似的语法:

    struct f {
        g member;
        f() try { 
            // empty
        } catch(...) { 
            std::cerr << "thrown from constructor of g"; 
        }
    };
    
        2
  •  9
  •   James Hopkin    17 年前

    是的,这是标准的。函数try块,正如它们被调用的那样,对于常规函数没有太多的用处,但是对于构造函数,它们允许您捕获在初始化器列表中抛出的异常。

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

    推荐文章