这个语法是什么意思?

时间:2012-07-20 09:07:32

标签: c++ syntax

我前段时间已经看到SO question中的特殊语法。

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

该函数外的try-catch-block的含义是什么?

2 个答案:

答案 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