涉及 `std::string` 的编译导致 Windows 错误状态
Compilations involving `std::string` cause Windows error status
最小示例:
#include <Windows.h>
#include <string>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //Behavior the same, with or without.
DWORD err = GetLastError();
std::string str;
return (int)err; //returns 127 iff line above uncommented, 0 iff commented
}
本节目returns127
,对应ERROR_PROC_NOT_FOUND
("The specified procedure could not be found.")。请注意 err
在 创建 std::string
之前设置 。该程序使用 MSVC 2017 在调试模式下编译。
这种行为是预期的吗?如果没有,我可以得到一些确认吗(然后,我会提交错误报告)?
GetLastError()
returns the last error code to be set by a WinAPI function called by this thread. Note that WinAPI functions do not necessarily成功后设置密码:
Most functions call SetLastError or SetLastErrorEx only when they fail.
您没有调用失败的 WinAPI 函数。因此,错误代码是不确定的。它要么未初始化(意味着未定义的行为),要么由未知函数设置(只是意义不大)。标准库使用异常来指示错误,而不是 Windows API.
"Is this behavior expected?"
从某种意义上说,该行为是预期的,因为该函数未在适当的上下文中使用,因此 任何 值都是可以接受的。
最小示例:
#include <Windows.h>
#include <string>
int main(int /*argc*/, char* /*argv*/[]) {
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //Behavior the same, with or without.
DWORD err = GetLastError();
std::string str;
return (int)err; //returns 127 iff line above uncommented, 0 iff commented
}
本节目returns127
,对应ERROR_PROC_NOT_FOUND
("The specified procedure could not be found.")。请注意 err
在 创建 std::string
之前设置 。该程序使用 MSVC 2017 在调试模式下编译。
这种行为是预期的吗?如果没有,我可以得到一些确认吗(然后,我会提交错误报告)?
GetLastError()
returns the last error code to be set by a WinAPI function called by this thread. Note that WinAPI functions do not necessarily成功后设置密码:
Most functions call SetLastError or SetLastErrorEx only when they fail.
您没有调用失败的 WinAPI 函数。因此,错误代码是不确定的。它要么未初始化(意味着未定义的行为),要么由未知函数设置(只是意义不大)。标准库使用异常来指示错误,而不是 Windows API.
"Is this behavior expected?"
从某种意义上说,该行为是预期的,因为该函数未在适当的上下文中使用,因此 任何 值都是可以接受的。