前段时间我在SO question中看到了特有的语法。这个语法的含义是什么?
class B{
A a;
public:
B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; };
};
这个try-catch-block函数的含义是什么?
前段时间我在SO question中看到了特有的语法。这个语法的含义是什么?
class B{
A a;
public:
B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; };
};
这个try-catch-block函数的含义是什么?
这是函数try块。在派生类的构造函数中只有在c-tors中捕获错误才有用。您可以在标准例如n3337草案参数文件中阅读有关此功能的更多信息。 15,15.1。
4所述的功能试块相关联的处理程序-SEQ与 构造函数初始值设定,如果存在的话,和化合物语句。在执行复合语句期间或在构造函数和析构函数执行期间抛出的异常 分别在类的子对象的初始化或销毁 的过程中将 控制转移到函数尝试块中的处理函数在执行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
}
末端示例]
它惹人创建成员对象时从一个构造抛出的异常。您提到的问题的答案之一包含解释详细信息的链接:http://www.gotw.ca/gotw/066.htm。
请参阅http://www.drdobbs.com/introduction-to-function-try-blocks/184401297以获得更深入的解释和理由。 – pmr 2012-07-20 09:14:23
哇..从来没有见过之前...谢谢你的回复 – PermanentGuest 2012-07-20 09:28:46
@PermanentGuest这个功能很少使用,因为在你的catch块异常结束时会重新抛出异常,如果你不抛出其他异常。函数尝试块不能接受异常。 – ForEveR 2012-07-20 09:32:47