关于函数范围异常处理

ahao 2004-06-22 03:13:43
比如下面的代码:

class A
{
public:
A()
{
throw ae();
}

class ae{};
};

class B
{
public:
B()
try : _sp_a( new A )
{
}
catch(A::ae& /*e*/)
{
int a = 0; // 会到这里
}

private:
shared_ptr<A> _sp_a;
};


void CTestsppoppDlg::OnBnClickedButton1()
try
{
B b;
}
catch(A::ae& /*e*/)
{
int b = 0; // 为什么会到这里?
};

为什么会进第二个catch?
我怎么才能捕获初始化列表里抛的异常,不让继续抛?
...全文
169 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
step_by_step 2004-06-26
  • 打赏
  • 举报
回复
c++标准里为了catch init list的异常也是用的这个方法,但是为什么你的编译器会出错,我就不得而知了。你用的是什么平台?什么开发工具?
ahao 2004-06-26
  • 打赏
  • 举报
回复
我用的是win2000, vc.net2003
ahao 2004-06-25
  • 打赏
  • 举报
回复
这个只是例子,当然可以放在构造里初始话,但又时候必须catch初始化列表的异常。我不清楚c++标准里到底是怎么规定的,应该是什么样子。
nzzt 2004-06-25
  • 打赏
  • 举报
回复
没找到对策,确实是两个地方都有catch到。
把构造列表放到{}里面去初始化应该可以杜绝这个问题吧?
pacman2000 2004-06-24
  • 打赏
  • 举报
回复
g++编译的时候出错了啊。不知道为什么。
steel007 2004-06-24
  • 打赏
  • 举报
回复
应该是编译器的问题,TCPPL上面的例子与你的一样~
zbstone 2004-06-24
  • 打赏
  • 举报
回复
看不大明白
ahao 2004-06-23
  • 打赏
  • 举报
回复
呵呵,要不是为了抓构造抛的异常,我也不会这么用的。不过这个确实是c++语法允许的
meijing 2004-06-23
  • 打赏
  • 举报
回复
从没想过这么用try、catch,厉害
ahao 2004-06-23
  • 打赏
  • 举报
回复
我用vc7.1
看来是编译器问题
steel007 2004-06-23
  • 打赏
  • 举报
回复
你用的什么编译器阿?
我用DEV-C++试,出现了你说的问题
但是用C++BuilderX和VC6试都没有问题~~
ahao 2004-06-23
  • 打赏
  • 举报
回复
up
ahao 2004-06-23
  • 打赏
  • 举报
回复
up
qwertasdfg123 2004-06-22
  • 打赏
  • 举报
回复
没看懂

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧