C++ 你真的可以有一个没有主体的函数/方法,而只是一个try/catch块吗?
请注意,此函数没有“{”和“}”主体。只是一个try/catch块:C++ 你真的可以有一个没有主体的函数/方法,而只是一个try/catch块吗?,c++,g++,try-catch,C++,G++,Try Catch,请注意,此函数没有“{”和“}”主体。只是一个try/catch块: void func( void ) try { ... } catch(...) { ... } 这是C++的有意部分,还是这是G++扩展?< /P> 除了绕过1级{}之外,还有其他目的吗 我从来没有听说过这个,直到我遇到了是的,它是标准的。函数try块,正如它们被调用的那样,对于常规函数没有太多的用处,但是对于构造函数,它们允许您捕获在初始化器列表中抛出的异常 注意,在构造函数的情况下,异常总是在任何cat
void func( void )
try
{
...
}
catch(...)
{
...
}
这是C++的有意部分,还是这是G++扩展?< /P> 除了绕过1级{}之外,还有其他目的吗
我从来没有听说过这个,直到我遇到了是的,它是标准的。函数try块,正如它们被调用的那样,对于常规函数没有太多的用处,但是对于构造函数,它们允许您捕获在初始化器列表中抛出的异常
注意,在构造函数的情况下,异常总是在任何catch块的结尾重新抛出。
< P>是的,这是有效的C++。我发现它的一个用途是将异常转换为返回值,并使转换返回值中异常的代码与函数中的其他代码分开。是的,您可以返回x代码>来自一个catch块,就像你展示的那样(实际上,我最近才发现)。但在这种情况下,我可能会使用另一个级别的大括号,并将try/catch放在函数中。对于大多数C++程序员来说,这将是比较熟悉的。
另一个目的是捕获构造函数初始值设定项列表引发的异常,该列表使用类似的语法:
struct f {
g member;
f() try {
// empty
} catch(...) {
std::cerr << "thrown from constructor of g";
}
};
struct f{
g成员;
f()尝试{
//空的
}捕获(…){
标准:cerr