C++ 基类抛出异常。如何传播?
上面的例子已经说过了。如何传播(重试)基类异常 我试着做这件可憎的事:C++ 基类抛出异常。如何传播?,c++,exception,try-catch,C++,Exception,Try Catch,上面的例子已经说过了。如何传播(重试)基类异常 我试着做这件可憎的事: class base { public: base() : value(int()) { throw true; } private: int value; }; class derived : public base { public: derived() : base() { // base class constructor called, `value` t
class base {
public:
base() : value(int()) {
throw true;
}
private:
int value;
};
class derived : public base {
public:
derived() : base() { // base class constructor called, `value` to be initialized
// I want this to propagate (rethrow) base class exception... how do I do it?
}
};
int main(){
try {
derived a;
}
catch(bool){
// Base class exception to be caught
}
}
不编译,给出语法错误。非常期待。解决办法是什么
不要再读了。需要更多字符。输入更多字符。问题中的代码已经完全符合您的要求()。异常将调用堆栈倒回到最近的处理异常类型的catch块
由于
derived::derived()
构造函数没有捕获异常,因此它会自动传播到调用方。问题中的代码已经完全符合您的要求()。异常将调用堆栈倒回到最近的处理异常类型的catch块
由于
derived::derived()
构造函数没有捕获异常,因此它会自动传播到调用方。好的,你说我必须捕获
。我用这种方式捕捉异常怎么样:derived():试试{base()}catch(bool){throw;}{}
。我觉得这是个很聪明的主意,虽然我的兄弟们都叫我白痴你是个很聪明的人。我尝试了try
和catch
,正如上面的评论中所写的那样。虽然兄弟们叫我有点粗。我的代码有什么问题?没有编译,请使用以下命令:derived()try:base(){}catch(bool){throw;}
。。。注释中的语法排列错误。@user3600124请参阅示例。另外需要注意的是,在构造函数周围的catch
块中,你不应该引用base
或derived
中的任何内容,因为此时两个对象都没有正确构造。好吧,你说我必须catch
。我用这种方式捕捉异常怎么样:derived():试试{base()}catch(bool){throw;}{}
。我觉得这是个很聪明的主意,虽然我的兄弟们都叫我白痴你是个很聪明的人。我尝试了try
和catch
,正如上面的评论中所写的那样。虽然兄弟们叫我有点粗。我的代码有什么问题?没有编译,请使用以下命令:derived()try:base(){}catch(bool){throw;}
。。。注释中的语法排列错误。@user3600124请参阅示例。另外需要注意的是,在构造函数周围的catch
块中,您不应该引用base
或derived
中的任何内容,因为在该点上没有正确构造任何对象。
class base {
public:
base() : value(int()) {
throw true;
}
private:
int value;
};
class derived : public base {
public:
derived() : try { base() } catch(bool) {throw;} {
// ...
}
};
int main(){
try {
derived a;
}
catch(bool){
// Base class exception to be caught
}
}