Windows 有人能解释为什么cout之后的语句会改变输出吗?

Windows 有人能解释为什么cout之后的语句会改变输出吗?,windows,cout,Windows,Cout,最奇怪的事情正在发生。在下面的程序中,我打印出一行。按原样,程序输出以下内容: -----FOCUS-----:0x22fc80: -----FOCUS-----:0: 但是,如果我在cout之后注释掉7条语句中的任何一条,我会得到以下结果: -----FOCUS-----:0x22fc80: -----FOCUS-----:0: 我已经包括了tchar.h、windows.h、iostream和Psapi.h。我正在使用MinGW-64,编译的命令是: "C:\MinGW64\bin\

最奇怪的事情正在发生。在下面的程序中,我打印出一行。按原样,程序输出以下内容:

-----FOCUS-----:0x22fc80:
-----FOCUS-----:0:
但是,如果我在cout之后注释掉7条语句中的任何一条,我会得到以下结果:

-----FOCUS-----:0x22fc80:
-----FOCUS-----:0:
我已经包括了tchar.h、windows.h、iostream和Psapi.h。我正在使用MinGW-64,编译的命令是:

"C:\MinGW64\bin\g++.exe" -o MyProgram.exe MyProgram.cpp -lpsapi
该计划是:

int main()
{
    HWND focusThreadWnd = GetForegroundWindow();
    DWORD focusThreadID = GetWindowThreadProcessId(focusThreadWnd,0);
    GUITHREADINFO focusThreadInfo;
    GetGUIThreadInfo(focusThreadID, &focusThreadInfo);
    HWND focus = focusThreadInfo.hwndFocus;
    cout << "-----FOCUS-----:" << focus << ":" << endl;

    HWND k1Focus = focusThreadWnd;
    HWND k2Focus = focusThreadWnd;
    HWND k3Focus = focusThreadWnd;
    HWND k4Focus = focusThreadWnd;
    HWND k5Focus = focusThreadWnd;
    HWND k6Focus = focusThreadWnd;
    HWND k7Focus = focusThreadWnd;
}
intmain()
{
HWND focusThreadWnd=GetForegroundWindow();
DWORD focusThreadID=GetWindowThreadProcessId(focusThreadWnd,0);
GUITHREADINFO focusThreadInfo;
GetGuitThreadInfo(focusThreadID和focusThreadInfo);
HWND focus=focusThreadInfo.hwndFocus;

cout我没有重现您的问题,但根据


这些额外的7个HWND影响了堆栈帧,导致cbSize被不同的值填充

如果在最后7行之前刷新输出流会怎么样?@SargeBorsch:
std::endl
刷新流。