请教一个try-catch位置的问题。


#1

处理异常的时候,一直比较习惯try-catch放在函数体外的这种形式:

void fun(type1,type2) try
{
  //...
}
catch(typeX){}

可是刚才在处理一个构造函数的异常时,这种方式会导致程序崩溃,而把try-catch放在构造函数内部就不会有这个问题。

#include <iostream>
#include <stdexcept>
using namespace std;
class A
{
public:
	A() try
	{
		throw runtime_error("exception.");
	}
	catch(exception& e)
	{
		cout<<e.what()<<endl;
	}
};
int main()
{
	A a;
	return 0;
}

#2

头同一回听说 try 还可以放到外面的 !!!!!

PS: 代码乱了 。。。 发完自己不看下的啊 。。。


#3

刚发,在改,9个字符


#4

不能放到外面吗?我的函数都是这么写的,也不记得在哪儿看到的了。


#5

这符合标准么? 我怎么都不知道有这种写法的!

我看书去 。。。。


#6

不清楚,以前这个构造函数没出异常还好,现在出了异常捕获了都崩溃,就觉得很奇怪。可能是不符合标准?


#7

我 out 了! 这居然是符合标准的! 在 BS 的书上, 371 页,找到了。


#8

仔细测试发现, 是因为 构造函数的那个写法是会导致 rethrow 的。


#9

找到了, 在 372 页, 构造函数你这种形式的里的 try catch 会导致 rethrow 。 函数级别的没有这个限制。


#11

多谢。我也找书来看看。