c++中异常问题?? try 语句

lkx语言创始人 2009-03-31 02:26:26
想问问大家,
在c++中,异常是不是都是try ..... throw ...

另外, 还问一下, throw...是不是必须放在try语句块中,

也就是说:

是不是必须像下面这样:
try
{
throw.....
}
catch ...
{
}
catch .....
{
}
是不是throw不能放在try的外面。比如:

像这样:

throw.........

try
{
}
catch
{
}
catch
{
}
....
这样行吗? 谢谢指点.
...全文
179 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohow 2009-04-01
  • 打赏
  • 举报
回复
throw可以位于try块之外,但是要有更高层次的try来捕获它,否则就可能在运行时抛出一个异常,比如跳出一个对话框,提示“未处理的异常”这样的信息,你愿意看到吗
lkx语言创始人 2009-04-01
  • 打赏
  • 举报
回复
你们误会我的意思了,我知道异常是怎么一回事,但是,不明白的是,throw 语句是不是一定得位于try语句块中,
也就是
try
{
throw................
}
catch
{
}
......


如果我把throw 语句放在try的外面,比如:

throw.....

try
{
}
catch
{
..
}

如果这样,能不能捕获到位于try之外的throw语句抛出的异常。。。。?????????????? 请高人指点。。。
kostion 2009-04-01
  • 打赏
  • 举报
回复
throw是显示的抛出异常,一般在我们的程序里都是隐士的抛出异常,就是由系统定义好的异常,比如被零除、I/O,异常等。在你的代码具体实现的时候,你可以自己定义一种异常,比如变量x的值在一系列运算后,如果值为零,你就可以把他看成异常,来处理他,比如

try
{
...;//x做运算
if(0 == x)
{
throw x; //抛出异常
}
...//没有发生异常,catch也不会执行


}
catch(x)
{
//对你认为的异常做处理
}
codinglife 2009-04-01
  • 打赏
  • 举报
回复
throw是抛出异常,可以自定义异常让其抛出
try的模块中如有异常,将会被与其配对的catch捕获
ok88062736 2009-03-31
  • 打赏
  • 举报
回复
...讨论这个问题有意思么?
maxuezhi 2009-03-31
  • 打赏
  • 举报
回复
try
{
//..
}这个try中你要是不写throw的话,会隐藏的提供一个throw
ypb362148418 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangch_nhcmo 的回复:]
C/C++ code
try
{
//...
}
catch(...)
{
//...
}
[/Quote]

看看C++编程思想第二卷,第一张,异常处理
yangch_nhcmo 2009-03-31
  • 打赏
  • 举报
回复

try
{
//...
}
catch(...)
{
//...
}
fairchild811 2009-03-31
  • 打赏
  • 举报
回复
不一定要有throw
try
{
}
catch(...)
{
}
会catch到所有的异常
ztenv 版主 2009-03-31
  • 打赏
  • 举报
回复
按道理来讲是可以的,只不过是当前函数的catch()子句catch不到你throw出来的异常,而是由调用此函数的函数(递归catch的),如果最外层的函数都没有catch()子句,则应应该会触发unexcepted()方法来调用termanite();
////初学,有不对之处请指教!
  • 打赏
  • 举报
回复
翻翻C++ primer ,后面讲栈展开,讲的很清楚的。
不如自己看书看的清楚
ForestDB 2009-03-31
  • 打赏
  • 举报
回复
throw是显式的抛出个异常,很多时候异常是由你调的函数抛出来的(隐式地)。
lkx语言创始人 2009-03-31
  • 打赏
  • 举报
回复
那我就更不明白了, 既然throw语句和try catch语句无关,那为什么有的说throw 语句必须放在try语句块中呢? 难道throw 的顺序有什么限制吗?
liliangbao 2009-03-31
  • 打赏
  • 举报
回复
try和catch是一对!放在一起!
而throw是把异常抛出,放到应该有可能发生异常的地方,和try和catch无关!
而try和catch是接收处理异常的,则应放在throw抛出之后的地方!
具体关于的看看帖子了!因为在调用函数中复杂一些!
叶落寒山 2009-03-31
  • 打赏
  • 举报
回复
throw...必须放在try语句块中。
msdn的示例代码

// try_catch_finally.cs
using System;
public class EHClass
{
static void Main()
{
try
{
Console.WriteLine("Executing the try statement.");
throw new NullReferenceException();
}
catch (NullReferenceException e)
{
Console.WriteLine("{0} Caught exception #1.", e);
}
catch
{
Console.WriteLine("Caught exception #2.");
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
mengde007 2009-03-31
  • 打赏
  • 举报
回复
try
{
}
catch
{
}
zhoulehua 2009-03-31
  • 打赏
  • 举报
回复
try和catch是一对,不能少的。另外还可以再加上Finally。
所以它有两种形式

try
{
}
catch
{
}

try
{
}
catch
{
}
Finally
{
}

意义就是:试图怎么做,否则就捕获到异常。
(你处理不处理,语句写在catch里,这样被你捕获的异常你不处理,系统也不会帮你处理了,就这样被忽略了。所以,在编程的时候,我们要么不捕获异常,要么就一定要进行处理,免得出错的时候调试半天都找不到错误所在。)
throw就是用于抛出异常的。它可在任意地方。
lgccaa 2009-03-31
  • 打赏
  • 举报
回复
不知道你为什么有这种想法
throw是抛出异常,没有捕获异常何来的抛出异常?

65,210

社区成员

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

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