Vc中的try{}catch(){},能否这样理解: 它只是改变了程序流程而已,若try块中没有有throw,则catch()也失去了意义!
它仅仅起到改变程序流程!

解决方案 »

  1.   

    不懂。
    这样会catch到什么错误?
      

  2.   

    当然不是,Try和catch很多时候是用于捕获异常,因为很多的异常会造成死机、程序直接中止运行或是其它的不可预知的后果,所以为了防患于未然,采用这个语句,让异常出现的时候也能够按照程序事先安排的方式进行下去,所以如果没有throw个人感觉那try就没有用处了
      

  3.   

    认识不清, try...catch是一种错误捕获机制,之所以诞生这种机制其实源于某些难以
    通过程序判断的错误,例如,一个文件操作过程的是否正确,有很多突然因素会影响,比如磁盘满了,而这些
    难以通过返回值来判断,此时就可以应用try..catch机制,反之,如果可以用返回值
    等已知条件来判断结果的,不可以用try..catch,因为tay...catch决不是只改变流程,
    而是增加了很多背后的代码来处理错误,滥用try...catch是编程大忌,不仅降低性能,
    甚至文件大小都会因此改变,可见其背后的代码是很复杂的。
    有些人主张完全不用,对于高性能场合比如嵌入式我认为确实有道理,但普通场合还是要用的。
    只不过要严格限制。
      

  4.   

    若try块中没有有throw,则catch()也失去了意义! 
    这句话不正确吧
      

  5.   

    不一定try语句中直接有throw语句,间接的,即在其中代码的函数调用树里有throw就可起作用。
    c++标准库里有默认的一些异常,所以我们不写throw,try...catch也会处理这些标准异常的。(另:楼上大哥加我好友啊,俺的请求没看到吗?)
      

  6.   

    说的很有道理,在某些场合是可有可无的东西,但是如果按程序设计出发点来说是必要的,因为你并不可能判断出所有的执行条件,同样在某些特殊运行环境下也会出现未知操作例如:内存堆申请失败,I/O访问违规,除数为零,页面访问中断,特别是现在随着技术壁垒消失,大量的恶意代码注入软件的运行环境更加恶劣,所以加入try...catch是必要的。例如:new 关键字,该关键字正常执行将分配内存堆并返回堆指针,但是也有异常情况发生且异常类型是bad_alloc,如果你没有捕获该类型异常那么如果发生此恶劣情况你的软件就会crush。
      

  7.   

    如果try块中的程序没有throw,catch块,还有何作用?这种时候,就不需要用这个东西。
      

  8.   

    归纳起来:
    1. 这是一种提倡的处理机制
    2. 没throw也catch
    3. 要正确使用try catch,不能滥用是否这样?虽然还是不很清楚,但我觉得,用好 try catch 是一个健壮程序必不可少的
      

  9.   

    另外还想问两个问题:
    我一般用这样的形式:
    try{}
    catch(...){}而装了Visual Assist后默认出来的try catch 是这样的形式:
    try
    {
    }
    catch (CMemoryException* e)
    {

    }
    catch (CFileException* e)
    {
    }
    catch (CException* e)
    {
    }很多时候我并不想知道异常具体是什么,只是想将其捕获,程序不致于崩溃,那么我用第一种形式,能否捕获到所有的异常呢?
    第二个:嵌套用try{}catch(){} 是不是一种合理的用法呢?
      

  10.   

    try中没有throw,catch中的语句还是照样执行,不影响。
      

  11.   

    没有throw的情况下,catch当然也是有用的。
    一些意料之外的错误的一catch到的。
    比如 
    try
    {
        XXXX();
    }
    catch
    {
        MessageBox(NULL,_T("Unknown exception"),NULL,0);
    }
    就可以抓到未处理的错误。