【发布时间】:2014-03-01 16:54:58
【问题描述】:
我不明白以下代码示例的作用以及它是如何做到的:
#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++ 中,全局变量是按定义顺序初始化的 supposed to be。这意味着a 应该在x 之前初始化,因为它是在x 之前定义的。如果是这种情况,则必须在初始化 x 之前调用函数 f,因为对 f 的调用是 a 定义的一部分。
如果f 确实在x 初始化之前被调用,那意味着f 将尝试增加x——我不确定的结果(很可能是UB,或者一些乱码值)。然后,在a被初始化后,x会被初始化为22,程序会打印出22。
显然不是这样。但有什么作用?该代码实际上做了什么?
在评估 a = f() 之前,x 似乎被设置为 22,但这意味着初始化的顺序是颠倒的(我也可能错了初始化是什么,或者什么时候发生) .
【问题讨论】:
标签: c++ variables initialization declaration definition