抛出异常问题该怎么去看她的执行过程


class excp
{
    char* pstr;
public:
    excp(char* m) {
        pstr = m;
    }
    void print()
    {
        cerr << pstr << endl;
    }
    
};
void fun1()
{
    excp a("e");
    throw a;
}
void fun2()
{
    try { fun1(); }
    catch (...) {
        cerr << "f";
        throw;
    }
}
int main()
{
    try { fun2(); }
    catch (...) {
        cerr << "m";
      
    }
    return 0;
}

请问这个过程是怎么进行的?

#include <iostream>

class excp
{
    const char *pstr;

  public:
    explicit excp(const char *m)
    {
        pstr = m;
        print();
        std::cout << "first\n";
    }
    void print()
    {
        std::cerr << pstr << std::endl;
    }
};
void fun1()
{
    excp a("e");
    throw a;
}

void fun2()
{
    try
    {
        fun1();
    }
    catch (excp &a)
    {
        a.print();
        std::cerr << "second\n";
        throw a;
    }
}

auto main() -> int
{
    try
    {
        fun2();
    }
    catch (excp &a)
    {
        a.print();
        std::cerr << "third\n";
    }
    return 0;
}

自己再相应位置设置一些输出,或者调试试试

【以下回答由 GPT 生成】

这段代码的执行过程如下:

  1. 首先,main()函数被调用。

  2. main()函数内部调用了fun2()函数。

  3. fun2()函数内部调用了fun1()函数。

  4. fun1()函数内部,创建了一个类对象excp a,并传入字符串"e"初始化。

  5. 然后,使用throw语句抛出了这个对象。

  6. 异常被抛出后,代码控制权返回到fun2()函数。

  7. fun2()函数内部的catch块捕获了异常,并输出字符串"f"。

  8. 使用throw语句再次抛出异常,将异常传递给上一层的异常处理块。

  9. 异常被抛出后,代码控制权返回到main()函数。

  10. main()函数内部的catch块捕获了异常,并输出字符串"m"。

  11. 程序执行完毕,返回0。

在这段代码中,异常被抛出后,会顺序查找合适的catch块来处理异常。在这个例子中,异常被fun2()函数的catch块和main()函数的catch块捕获并处理。如果没有找到适合的catch块,异常会导致程序终止。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^