MSVC 中的异常处理

异常是一个可能超出程序的控制范围的错误条件,它会阻止程序继续沿其常规执行路径执行。 某些操作(包括对象创建、文件输入/输出以及从其他模块中进行的函数调用)都可能是异常的来源,即便程序正常运行也是如此。 可靠代码可预见并处理异常。 若要检测逻辑错误,请使用断言而不是异常(请参阅使用断言)。

异常类型

Microsoft C++ 编译器 (MSVC) 支持三类异常处理:

  • C++ 异常处理

    对于大多数 C++ 程序,应使用 C++ 异常处理。 它是类型安全的,可确保在展开堆栈时调用析构函数。

  • 结构化异常处理

    Windows 提供自己的异常机制,称为结构化异常处理 (SEH)。 建议不要将该机制用于 C++ 或 MFC 编程。 仅在非 MFC C 程序中使用 SEH。

  • MFC 异常

    自版本 3.0 起,MFC 已使用 C++ 异常。 它仍支持其较早的异常处理宏,这些宏在形式上与 C++ 异常类似。 有关将 MFC 宏和 C++ 异常组合的建议,请参阅异常:使用 MFC 宏和 C++ 异常

使用 /EH 编译器选项来指定要在 C++ 项目中使用的异常处理模型。 标准 C++ 异常处理 (/EHsc) 是 Visual Studio 中新 C++ 项目中的默认值。

不建议混合使用异常处理机制。 例如,不要将结构化异常处理用于 C++ 异常。 专门使用 C++ 异常处理可以使代码的移植性更强,并且它使你可以处理任何类型的异常。 有关结构化异常处理的缺点的详细信息,请参阅结构化异常处理

本节内容

另请参阅

C++ 语言参考
x64 异常处理
异常处理 (C++/CLI 和 C++/CX)