c++ - 以下代码的输出是什么? (处理c++的异常)

标签 c++ exception error-handling

学生在这里。我正在尝试学习c++中异常处理的基础知识,并且获得了一段使我感到困惑的代码。有人可以解释一下为什么输出为120吗?另外,我不明白为什么我在exec()func {X,x}的主体中。 {}在这里做什么?谢谢 !

#include <iostream>
#include <string>
using namespace std;

class X {
public:
    X(void){
       cout<<1;
    }
    ~X(void){
       cout<<2;
    }
};

void exec(){
   {
    X x;
   }
   throw string("0");
}

int main() 
{
    try{
       exec();
    }catch(string &s){
    cout<<s;
    }
return 0;
}

最佳答案

如果实际运行代码,您将自己看到输出:

120


Live Demo
这是怎么回事:
  • main()进入try块并调用exec()
  • exec()创建一个嵌套范围,在该范围内创建和销毁X对象。该对象的构造函数和析构函数打印为cout,因此您分别看到12
  • 范围结束后的
  • ,将创建一个新的std::string对象,并将其传递给throw。字符串的内容是"0"
  • throw在调用堆栈中搜索可以处理catch对象的std::string块。这样的catchmain()中。
  • 取消对exec()的调用堆栈,执行跳转到找到的catch块。
  • std::string被打印为cout,因此您看到0
  • catch块结束,main()退出,程序终止。
  • 关于c++ - 以下代码的输出是什么? (处理c++的异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65116511/

    相关文章:

    delphi - Delphi 7 中的 GetStackTrace?

    android -/system/lib64/libart.so 中的 native 崩溃

    python - hashlib 模块出现错误

    ios - 静态NSString * const-在iOS中引发错误 'Unknown type name ' NSString''

    c++ - "POR"在嵌入式开发中是什么意思?

    c++ - 为什么我的 "choose k from n"算法适用于 std::vector 但不适用于 std::map?

    c++ - 如何在 C++ 中获取两个 vector 共有的字符?

    java - 输入不匹配异常

    jquery - 是否可以在jQuery中处理和过滤JSON响应?

    c++ - 为引用返回访问器定义获取和设置行为