【问题标题】:WINAPI SetLastError versus C++ Keword ThrowWINAPI SetLastError 与 C++ Keword Throw
【发布时间】:2010-04-29 14:14:16
【问题描述】:

WINAPI SetLastError() 和 C++ 关键字 throw 有什么区别?比如SetLastError(5);throw 5;一样吗?

【问题讨论】:

    标签: c++ winapi exception custom-errors


    【解决方案1】:

    SetLastError 设置一个简单的全局变量,它对程序的流程没有任何作用。

    throw 将停止正在运行的程序的流程,展开堆栈,直到它在某个地方被 try - catch 子句捕获。然后程序流将从捕获的末尾继续。

    我建议阅读this 文章,它解释了异常的概念。并阅读 C++ 异常。

    • 另外,不要抛出 5,抛出一个非内置对象,最好由 std::exception 继承。一个对象可以包含一些状态,告诉 catch 子句如何处理错误。

    【讨论】:

      【解决方案2】:

      throw 引发异常,该异常被 catch 块捕获,并且是 C++ 语言的一部分。 SetLastError() 是 Microsoft 提供的特定于 Windows 的 API 的一部分,它更改了 GetLastError() 返回的值。换句话说,它们完全不同!抛出异常会展开堆栈(调用所有局部变量的析构函数)并将程序执行移动到适当的 catch 块。 SetLastError() 没有这样做,它只是一个 API 函数。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 1970-01-01
        • 2018-02-19
        • 2010-10-20
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 2014-01-31
        相关资源
        最近更新 更多