0

SetLastError()WINAPI和 C++ 关键字有什么区别throw?例如,是否SetLastError(5);throw 5;相同?

4

2 回答 2

8

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

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

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

  • 另外,不要抛出 5,抛出一个非内置对象,最好由 std::exception 继承。一个对象可以包含一些状态,告诉 catch 子句如何处理错误。
于 2010-04-29T14:24:37.573 回答
4

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

于 2010-04-29T14:18:09.273 回答