代码之家  ›  专栏  ›  技术社区  ›  Zain Rizvi viperguynaz

除了block或try/catch block之外,还有什么更好的用法?

  •  26
  • Zain Rizvi viperguynaz  · 技术社区  · 14 年前

    我想知道捕获抛出的异常的更好方法是什么:是一个try/catch块还是一个try/catch块?

    我用C++编写,程序只在Windows上使用,所以移植性不是问题。

    谢谢!

    5 回复  |  直到 6 年前
        1
  •  18
  •   Billy ONeal IS4    12 年前

    你应该使用 try / catch 阻止。

    正如其他人已经回答的那样, __try __except 用于捕获SEH(windows生成的错误),而不是用于捕获常规异常。

    __试试看 __catch 当抛出异常时,可能不运行C++析构函数或正确解压缩堆栈。

    除非在极少数情况下,您不应该尝试捕捉SEH异常。

    好吧,我对此持肯定态度(这是我一直被告知的),但是@Hans说显然有一个编译器开关可以用来改变这一点。我想那些文件 /EHa 在这里发生的事情上是误导性的,或者至少是不完整的。如果有人找到确凿的文件证明这是错误的,我很乐意删除这个答案。

    即使结果是错误的,你仍然应该使用 尝试 抓住 __试试看 他们不是。

        2
  •  44
  •   Hans Passant    14 年前

    非常 __try/__except 用于捕获SEH异常。Windows本身引发的异常,如DivisionByZero或AccessViolation。这是很好的描述在 MSDN Library article 为了它。

        3
  •  6
  •   Randolpho    14 年前

    __try/__except 设计用于调用不支持异常但使用结构化错误代码/处理机制的Win32 C代码。 __尝试/\u 将C错误转换为异常块 类似的 到C++尝试/捕获。

    this MSDN article .

        4
  •  4
  •   Cătălin Pitiș    14 年前

    但是,如果您计划使用通过Windows SDK提供的结构化异常处理(请参阅 here ),然后使用 __try / __except .

        5
  •  2
  •   Rob Kennedy    14 年前

    throw ),然后使用 try catch . 如果抛出Windows异常(即 RaiseException ),然后使用 __try __except . 把它们混在一起只会给你的生活增添不必要的麻烦。