C++ 当有多个程序时,重播是如何工作的?

C++ 当有多个程序时,重播是如何工作的?,c++,exception-handling,C++,Exception Handling,这个程序没有给出我期望的输出 根据我对C++中的重发的理解,它应该执行程序的下一个catch块,但它不执行catch块,而是执行下一个程序。改头换面实际上是做什么的 它给出的输出是“intcatch”,但我希望它输出“intcaughtcatch”。我的推理有什么问题 #include <iostream> using namespace std; template <class t> void sign(t a) { try { throw

这个程序没有给出我期望的输出

根据我对C++中的重发的理解,它应该执行程序的下一个catch块,但它不执行catch块,而是执行下一个程序。改头换面实际上是做什么的

它给出的输出是“intcatch”,但我希望它输出“intcaughtcatch”。我的推理有什么问题

#include <iostream>

using namespace std;

template <class t>
void sign(t a) {
    try {
        throw a;
    } catch (int i) {
        cout << "int";
        throw;
    }
}

main() {
    try {
        sign<int>(1);
        sign<int>('1');
    } catch (...) {
        cout << "caught";
    }
}
#包括
使用名称空间std;
模板
无效标志(t a){
试一试{
扔一个;
}捕获(int i){
cout
符号('1');
(如果是,则根据平台上的字符编码,
char
literal
'1'
将转换为
int

这是因为
之后的
抛出;

请注意,我在第二次调用中也更改了模板参数,否则您的
“int”
输出将再次显示。

尝试使用调试器,它非常适合处理此类问题。我试图澄清您的语言,但我不确定“程序”是什么意思所以我无法完全澄清。你能解释一下“程序”是什么意思吗?“它正在执行下一个程序”下一个程序是什么?
main
需要返回类型。要回答问题的标题,所有异常处理都是程序本地的。如果main未捕获异常,则操作系统将捕获。与多个或其他程序无关。
try {
    sign<int>(1);
    sign<int>('1');
} catch (...) {
    cout << "caught";
}
try {
    sign<int>(1);
} catch (...) {
    cout << "caught";
}

try {
    sign<char>('1');
} catch (...) {
    cout << "caught";
}