WINAPI SetLastError()
和C ++关键字throw
之间有什么区别?例如,SetLastError(5);
和throw 5;
是一样的吗?
答案 0 :(得分:8)
SetLastError设置一个简单的全局变量,它对程序流没有任何作用。
throw将停止正在运行的程序的流程,展开堆栈直到它被一个try-catch子句捕获到某处。然后程序流将从捕获结束开始继续。
我建议阅读this文章,该文章解释了例外的概念。并阅读C ++异常。
答案 1 :(得分:4)
throw
抛出一个由catch
块捕获的异常,它是C ++语言的一部分。 SetLastError()
是Microsoft特定于Windows的API的一部分,用于更改GetLastError()
返回的值。换句话说,它们完全不同!抛出异常会展开堆栈(调用所有局部变量的析构函数)并将程序执行移动到适当的catch块。 SetLastError()
没有这样做,它只是一个API函数。