关于函数范围异常处理

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?
我怎么才能捕获初始化列表里抛的异常,不让继续抛?
...全文
146 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
没看懂
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2004-06-22 03:13
社区公告
暂无公告