c++ - 基类抛出异常。如何传播?
问题描述
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
}
}
上面的例子中已经说了一切。如何传播(重新抛出)基类异常?
我试试这个可憎的:
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
}
}
不编译,给出语法错误。非常期待。解决办法是什么?
不要进一步阅读。需要更多字符。输入更多字符。
解决方案
您在问题中的代码已经完全符合您的要求(请参见此处的演示)。异常将调用堆栈回退到最近的处理异常类型的 catch 块。
由于derived::derived()
构造函数没有捕获异常,它会自动传播给调用者。
推荐阅读
- google-cloud-platform - GCS:如何以存储对象管理员身份上传到存储桶
- javascript - javascript mapobject中的正则表达式
- python - 如何检查 python/tk 中条目小部件的内容是浮点数、字符串、布尔值还是整数?
- sql - SQL Server 邮件变量用法
- java - 模板方法和继承或组合
- php - 向上和向下舍入为 0.5,如果在点文档后为 0
- java - Fragment给了我白屏
- php - 在codeigniter中使用form_error函数后,html消失
- reactjs - 反应路由更改后如何重新安装组件
- ruby-on-rails - 如何使用 rubyzip gem 压缩列表临时文件