我不理解下面代码示例的作用和实现方式:
#include <stdio.h>
int f();
int a = f(); // a exists just to call f
int x = 22;
int f() {
++x;
return 123; // unimportant arbitrary number
}
int main() {
printf("%d\n", x);
}
运行此代码将打印出23
,这是直观的答案。
然而在C++中,全局变量应该按定义顺序初始化。这意味着a
应该在x
之前初始化,因为它在x
之前被定义。如果是这样,那么函数f
必须在x
初始化之前调用,因为对f
的调用是a
定义的一部分。
如果确实在x
初始化之前调用了f
,那么f
就会尝试增加x
的值——其结果我并不确定(最可能是未定义行为或一些无意义的值)。然后,在初始化a
之后,x
将被初始化为22
,程序将输出22
。
显然这不是发生的事情。但实际上它做了什么?
在评估a = f()
之前,x
明显被设置为22
,但这意味着初始化顺序被颠倒了(我可能也对初始化或其发生时间有所错误理解)。
x = f();
,但我认为你的意思是a = f();
(这是我的代码中的内容)。 - corazza