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
  }

}