我前段时间已经看到SO question中的特殊语法。
class B{
A a;
public:
B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; };
};
该函数外的try-catch-block的含义是什么?
答案 0 :(得分:10)
这是函数try块。仅在c-tors中用于派生类构造函数中的catch错误。您可以在标准中阅读有关此功能的更多信息,例如n3337草案。 15,15.1。
4 function-try-block将handler-seq与 ctor-initializer(如果存在)和复合语句。例外 在执行复合语句期间抛出,或者 构造函数和析构函数,在初始化期间或 分别破坏了阶级的子对象,转移 以与a相同的方式控制函数try-block中的处理程序 在执行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
}
-end example]
答案 1 :(得分:0)
它捕获创建成员对象时从构造函数抛出的异常。您提到的问题的答案之一包含一个解释详细信息的链接:http://www.gotw.ca/gotw/066.htm。