gpt4 book ai didi

C++ 异常处理通过引用传递 : thrown address is different from caught address?

转载 作者:太空狗 更新时间:2023-10-29 23:53:38 24 4
gpt4 key购买 nike

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


class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
};

int main ()
{
try
{
myexception myex;
printf("addr1:%x\n",&myex);
throw myex;
}
catch (exception& e)
{
printf("addr2:%x\n",&e);
cout << e.what() << endl;
}
return 0;
}

这个程序的输出:

addr1:6d78c020
addr2:20a1080
My exception happened

问题:您是否看到 addr1 和 addr2 不同,知道为什么吗?

最佳答案

当抛出异常时,会生成一个拷贝。您正在查看该拷贝的地址。

(处理程序的异常怎么可能有相同的地址?当你抛出时,你退出了包含异常的 block ,所以它不复存在。你不能访问不存在的东西。)

关于C++ 异常处理通过引用传递 : thrown address is different from caught address?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003429/

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