小众知识

首页 > 正文

函数try块的问题

求教:一下函数try块不知为何编译不过

#include
#include
#include
using namespace std;

int main() try{
   //...

   return 0;
}
catch(const exception &ex) {
   cout<   abort();
}  

 goodboy1881 发表于:2003-08-07 17:07:39
得分:0 

???
你怎么这么用?
try与catch是不能加载到整个函数之外的,放在里面就好了
#include
#include
#include
using namespace std;

int main()
{
   try{
      
   }
   catch(const exception &ex) {
   cout<   abort();
}
   return 0;
}

 cleanduo 发表于:2003-08-07 17:15:19
得分:0 

楼上的有道理 

 micropentium6 发表于:2003-08-07 17:34:30
得分:20 

这样的代码是没有问题的,try块可以包含函数本身
关键是你使用的什么编译器
刚才和一个朋友聊到这个,在gcc里这个是可以编译通过的:) 

 micropentium6 发表于:2003-08-07 17:38:33
得分:0 

vc7.0可以
vc6.0不可以 

 njtu 发表于:2003-08-07 17:39:19
得分:0 

try。。 catch应该抱在函数内
int main() {
try{
   ...
   return 0;
   }
catch(const exception &ex) {
   cout<   abort();
   }
}

 njtu 发表于:2003-08-07 17:44:52
得分:0 

to  micropentium6(小笨) 
这样的代码是没有问题的,try块可以包含函数本身
关键是你使用的什么编译器
刚才和一个朋友聊到这个,在gcc里这个是可以编译通过的:)

这样的用法是标准的吗?
以前没有注意到这个问题,这符合C++标准吗? 

 micropentium6 发表于:2003-08-07 17:50:34
得分:0 

你可以看c++ primer的异常处理一章,因为我刚看过所以记得
老实说我刚看到时也很诧异,不过这么用没什么不好:) 

 goodboy1881 发表于:2003-08-07 17:59:47
得分:10 

不好意思,刚看了C++的标准文件
这么写的确可以,但是有些编译器也的确不支持,例如borland c++ complier5.5
我看的是C++程序设计语言,上面没有这么写代码的(如果我没看漏的话)
所以我也就没有这么写的习惯 

 Cybergate 发表于:2003-08-07 19:38:33
得分:0 

这种写法是可以的,<>中有详细介绍 

 Hotman_x 发表于:2003-08-07 19:54:09
得分:20 

这样写代码是可以的,但是象楼主这样的情况不该用。其实设计这种 try 块,主要目的是为了捕获析构函数的异常。因为析构函数不能返回值,它执行完后,对象就没了,所以也不能象构造函数一样抑制异常,等待客户代码来处理。为此,当时 C++ 委员会的老大们想了这么个法子。
可是,后来几乎所有实践都证明,析构函数绝不应该抛出异常(如果发生了这种事就意味着不良的设计),因而这个功能几乎就形同虚设,许多技术专家认为当初将它加入 C++ 是一个错误。好象在 《More Exceptional C++》 中对此有详细的论述(如果记错,请别见怪)。

 NathanWan 发表于:2003-08-08 16:40:48
得分:0 

谢谢大家,估计和编译器有关,结贴 

上一篇:我看完了钱能的C++,现在看C++ PRIMER是否合适?
下一篇:fastreport2.5刚开始安装时就提示fr_class.pas(line too long (more than 1023characters)(c++builder5)是怎么回事啊,谢谢

分享到: