9

不久前,我在一个SO 问题中看到了特殊的语法。

class B{
    A a;
    public:
        B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; };
};

这个函数外的try-catch-block是什么意思?

4

2 回答 2

10

它的功能尝试块。仅在 c-tors 中有用,用于在派生类构造函数中捕获错误。您可以在标准中阅读有关此功能的更多信息,例如 n3337 草案标准。15、15.1。

4 function-try-block 将 handler-seq 与 ctor-initializer(如果存在)和复合语句相关联。在复合语句执行期间引发的异常,或者对于构造函数和析构函数,分别在类的子对象的初始化或销毁期间引发的异常,以与异常相同的方式将控制权转移到函数尝试块中的处理程序在 try-block 执行期间抛出的将控制转移到其他处理程序。[ 例子:

int f(int);
class C {
int i;
double d;
public:
C(int, double);
};
C::C(int ii, double id)
try : i(f(ii)), d(id) {
// constructor statements
}
catch (...) {
// handles exceptions thrown from the ctor-initializer
// and from the constructor statements
}

—结束示例]

于 2012-07-20T09:09:41.137 回答
0

它在创建成员对象时捕获构造函数抛出的异常。您提到的问题的答案之一包含一个解释详细信息的链接:http ://www.gotw.ca/gotw/066.htm 。

于 2012-07-20T09:21:33.137 回答