关于try{}catch(){} Vc中的try{}catch(){},能否这样理解: 它只是改变了程序流程而已,若try块中没有有throw,则catch()也失去了意义!它仅仅起到改变程序流程! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不懂。这样会catch到什么错误? 当然不是,Try和catch很多时候是用于捕获异常,因为很多的异常会造成死机、程序直接中止运行或是其它的不可预知的后果,所以为了防患于未然,采用这个语句,让异常出现的时候也能够按照程序事先安排的方式进行下去,所以如果没有throw个人感觉那try就没有用处了 认识不清, try...catch是一种错误捕获机制,之所以诞生这种机制其实源于某些难以通过程序判断的错误,例如,一个文件操作过程的是否正确,有很多突然因素会影响,比如磁盘满了,而这些难以通过返回值来判断,此时就可以应用try..catch机制,反之,如果可以用返回值等已知条件来判断结果的,不可以用try..catch,因为tay...catch决不是只改变流程,而是增加了很多背后的代码来处理错误,滥用try...catch是编程大忌,不仅降低性能,甚至文件大小都会因此改变,可见其背后的代码是很复杂的。有些人主张完全不用,对于高性能场合比如嵌入式我认为确实有道理,但普通场合还是要用的。只不过要严格限制。 若try块中没有有throw,则catch()也失去了意义! 这句话不正确吧 不一定try语句中直接有throw语句,间接的,即在其中代码的函数调用树里有throw就可起作用。c++标准库里有默认的一些异常,所以我们不写throw,try...catch也会处理这些标准异常的。(另:楼上大哥加我好友啊,俺的请求没看到吗?) 说的很有道理,在某些场合是可有可无的东西,但是如果按程序设计出发点来说是必要的,因为你并不可能判断出所有的执行条件,同样在某些特殊运行环境下也会出现未知操作例如:内存堆申请失败,I/O访问违规,除数为零,页面访问中断,特别是现在随着技术壁垒消失,大量的恶意代码注入软件的运行环境更加恶劣,所以加入try...catch是必要的。例如:new 关键字,该关键字正常执行将分配内存堆并返回堆指针,但是也有异常情况发生且异常类型是bad_alloc,如果你没有捕获该类型异常那么如果发生此恶劣情况你的软件就会crush。 如果try块中的程序没有throw,catch块,还有何作用?这种时候,就不需要用这个东西。 归纳起来:1. 这是一种提倡的处理机制2. 没throw也catch3. 要正确使用try catch,不能滥用是否这样?虽然还是不很清楚,但我觉得,用好 try catch 是一个健壮程序必不可少的 另外还想问两个问题:我一般用这样的形式:try{}catch(...){}而装了Visual Assist后默认出来的try catch 是这样的形式:try{}catch (CMemoryException* e){ }catch (CFileException* e){}catch (CException* e){}很多时候我并不想知道异常具体是什么,只是想将其捕获,程序不致于崩溃,那么我用第一种形式,能否捕获到所有的异常呢?第二个:嵌套用try{}catch(){} 是不是一种合理的用法呢? try中没有throw,catch中的语句还是照样执行,不影响。 没有throw的情况下,catch当然也是有用的。一些意料之外的错误的一catch到的。比如 try{ XXXX();}catch{ MessageBox(NULL,_T("Unknown exception"),NULL,0);}就可以抓到未处理的错误。 新建的mfc工程怎么改背景图片呢 如何保存网页时仅生产一个html页面? [求助]关于判断QQ好友上线问题 把存储过程返回值传给VC6中的变量,如何做?急需!!! 关于消息映射问题 从文件中检测某一字符串出现的频率,答对者有高分!!(在线等待) 高手们,如何把CComboBox里面的字符串一次全部清光? 求教如何在程序里实现“关机” 和“ 等待”等功能! 求教一个打包问题,急啊,请各位教教我! 在ODBC API中如何处理SQL SERVER的DateTime数据类型? 请教下这种“提示”怎么写啊 有经验的请来帮个忙,没有经验请来捧个场,小弟感激涕零!!
这样会catch到什么错误?
通过程序判断的错误,例如,一个文件操作过程的是否正确,有很多突然因素会影响,比如磁盘满了,而这些
难以通过返回值来判断,此时就可以应用try..catch机制,反之,如果可以用返回值
等已知条件来判断结果的,不可以用try..catch,因为tay...catch决不是只改变流程,
而是增加了很多背后的代码来处理错误,滥用try...catch是编程大忌,不仅降低性能,
甚至文件大小都会因此改变,可见其背后的代码是很复杂的。
有些人主张完全不用,对于高性能场合比如嵌入式我认为确实有道理,但普通场合还是要用的。
只不过要严格限制。
这句话不正确吧
c++标准库里有默认的一些异常,所以我们不写throw,try...catch也会处理这些标准异常的。(另:楼上大哥加我好友啊,俺的请求没看到吗?)
1. 这是一种提倡的处理机制
2. 没throw也catch
3. 要正确使用try catch,不能滥用是否这样?虽然还是不很清楚,但我觉得,用好 try catch 是一个健壮程序必不可少的
我一般用这样的形式:
try{}
catch(...){}而装了Visual Assist后默认出来的try catch 是这样的形式:
try
{
}
catch (CMemoryException* e)
{
}
catch (CFileException* e)
{
}
catch (CException* e)
{
}很多时候我并不想知道异常具体是什么,只是想将其捕获,程序不致于崩溃,那么我用第一种形式,能否捕获到所有的异常呢?
第二个:嵌套用try{}catch(){} 是不是一种合理的用法呢?
一些意料之外的错误的一catch到的。
比如
try
{
XXXX();
}
catch
{
MessageBox(NULL,_T("Unknown exception"),NULL,0);
}
就可以抓到未处理的错误。