gpt4 book ai didi

c++ - 异常被捕获两次

转载 作者:IT老高 更新时间:2023-10-28 23:13:17 24 4
gpt4 key购买 nike

class A{
public:
A() { throw string("exception A"); };
};

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

int main(){
try{
B b;
}catch(string& s){
cout << &s << " " << s << endl;
}
return 0;
}

输出是:

0x32c88 exception A
0x32c88 exception A

既然异常已经在B的构造函数中被捕获了,为什么它还在main函数中出现?

最佳答案

当contol的流程到达构造函数的function-try-block的处理程序末尾时,捕获的异常将自动重新抛出。

您不能抑制在派生类构造函数中构造基类或成员期间引发的异常,因为这会导致构造的派生对象的基类或成员构造失败。

此 GOTW 相关:http://www.gotw.ca/gotw/066.htm

来自 ISO/IEC 14882:2011 15.3 [except.handle]/15:

The currently handled exception is rethrown if control reaches the end of a handler of the function-try-block of a constructor or destructor. [...]

关于c++ - 异常被捕获两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11574995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com