用一个 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;
}
您实际上遇到了未指明的行为。在此上下文中,以及运算符具有相同优先级的任何其他此类上下文中,可以按任何顺序评估函数调用。在这种情况下,编译器选择在第一个函数调用之前评估第二个函数调用,但其他编译器可能会采用不同的方式。
所以当我有这个功能,并通过多个语句将它打印到控制台时,我得到了预期的结果:
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;
}
您实际上遇到了未指明的行为。在此上下文中,以及运算符具有相同优先级的任何其他此类上下文中,可以按任何顺序评估函数调用。在这种情况下,编译器选择在第一个函数调用之前评估第二个函数调用,但其他编译器可能会采用不同的方式。