gpt4 book ai didi

c++ - 抛出字符但捕获整数 : how are promotions and conversions handled with exceptions?

转载 作者:太空狗 更新时间:2023-10-29 20:51:35 26 4
gpt4 key购买 nike

我正在使用 MinGW 64 位在 Windows 10 上使用 NetBeans 8.1 补丁 1 在 C++ 中编写一些关于异常的练习,但是当我在 IDE 中执行代码时预期的结果不一样。

代码如下:

#include <cstdlib>
#include <iostream>

using namespace std;

void f() {
throw 'A';
}

int main() {
try {
try {
f();
} catch (int) {
cout << "In catch (int) 1" << endl;
throw;
} catch (...) {
cout << "In catch (...) 1" << endl;
throw 65;
}
} catch (int&) {
cout << "In catch (int&)" << endl;
} catch (int) {
cout << "In catch (int) 2" << endl;
} catch (const int) {
cout << "In catch (const int)" << endl;
} catch (...) {
cout << "In catch (...) 2" << endl;
}

cout << "End of program" << endl;
return EXIT_SUCCESS;
}

终端显示这个:

In catch (int) 1
In catch (int&)
End of program

正常情况下,终端应该在第一行显示“In catch(...) 1”,但我不明白为什么IDE没有显示好的结果。

我在 PowerShell 上使用 g++ 尝试了这段代码,结果相同,但在 Linux Ubuntu 上使用 g++,他显示了正确的结果。

我没有任何建议。

感谢您的帮助。亲切的问候。

最佳答案

Integral promotions在搜索合适的捕获物时会考虑。 'A' 是一个字 rune 字,并被提升为一个 int

因此:

  1. throw 'A'; 执行;
  2. catch(int)积分提升后;
  3. throw; 重新抛出同一个对象 ( no copy is made );
  4. catch (int&) 捕获它(注意:catch (int) 可以捕获它,但它不是最近的捕获);
  5. 程序结束。

供引用,[except.throw]/2 解释了nearest 的含义:

When an exception is thrown, control is transferred to the nearest handler with a matching type ([except.handle]); “nearest” means the handler for which the compound-statement or ctor-initializer following the try keyword was most recently entered by the thread of control and not yet exited.

关于c++ - 抛出字符但捕获整数 : how are promotions and conversions handled with exceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366168/

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