学生在这里。我正在尝试学习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
,因此您分别看到1
和2
。 std::string
对象,并将其传递给throw
。字符串的内容是"0"
。 throw
在调用堆栈中搜索可以处理catch
对象的std::string
块。这样的catch
在main()
中。 exec()
的调用堆栈,执行跳转到找到的catch
块。 std::string
被打印为cout
,因此您看到0
。 catch
块结束,main()
退出,程序终止。 关于c++ - 以下代码的输出是什么? (处理c++的异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65116511/