【发布时间】:2010-04-29 14:14:16
【问题描述】:
WINAPI SetLastError() 和 C++ 关键字 throw 有什么区别?比如SetLastError(5);和throw 5;一样吗?
【问题讨论】:
标签: c++ winapi exception custom-errors
WINAPI SetLastError() 和 C++ 关键字 throw 有什么区别?比如SetLastError(5);和throw 5;一样吗?
【问题讨论】:
标签: c++ winapi exception custom-errors
SetLastError 设置一个简单的全局变量,它对程序的流程没有任何作用。
throw 将停止正在运行的程序的流程,展开堆栈,直到它在某个地方被 try - catch 子句捕获。然后程序流将从捕获的末尾继续。
我建议阅读this 文章,它解释了异常的概念。并阅读 C++ 异常。
【讨论】:
throw 引发异常,该异常被 catch 块捕获,并且是 C++ 语言的一部分。 SetLastError() 是 Microsoft 提供的特定于 Windows 的 API 的一部分,它更改了 GetLastError() 返回的值。换句话说,它们完全不同!抛出异常会展开堆栈(调用所有局部变量的析构函数)并将程序执行移动到适当的 catch 块。 SetLastError() 没有这样做,它只是一个 API 函数。
【讨论】: