用一个 std::cout 和多个 std::cout 打印带有静态 int 的函数有什么区别?

What is the difference in printing a function with a static int with one std::cout and multiple std::cout?

所以当我有这个功能,并通过多个语句将它打印到控制台时,我得到了预期的结果:

0

1

但是当我在同一行仅通过一个 cout 语句打印函数时,我得到:

3 2

(这是在之前打印的初始 0 和 1 之后)

为什么打印反了?

#include "stdafx.h"
#include <iostream>

using namespace std;

int addOne()
{
    static int s_num = -1;
    return ++s_num;
}

int main()
{
    cout << addOne() << "\n";
    cout << addOne() << "\n";
    cout << addOne() << " " << addOne() << "\n";

    return 0;
}

您实际上遇到了未指明的行为。在此上下文中,以及运算符具有相同优先级的任何其他此类上下文中,可以按任何顺序评估函数调用。在这种情况下,编译器选择在第一个函数调用之前评估第二个函数调用,但其他编译器可能会采用不同的方式。