Joh*_*itb 64 c++ initialization initialization-order
我有这个问题,我之前想过这个问题,但认为回答并非易事
int x = x + 1;
int main() {
return x;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果程序的行为是有效的,那么它是否被定义或未定义.如果定义了,那么x已知的值是main多少?
Jer*_*fin 100
我很确定它已定义,x应该具有值1.§3.6.2/ 1说:"具有静态存储持续时间(3.7.1)的对象应在任何其他初始化发生之前进行零初始化(8.5). "
在那之后,我认为这一切都非常简单.
Dum*_*001 11
我的问题是,如果程序的行为是有效的,那么它是否被定义或未定义.如果定义了,那么x的值是否在main中已知?
这段代码绝对不干净,但对我来说它应该是可预测的.
int x将变量放入数据段中,该数据段在程序启动时定义为零.之前main(),调用静态初始值设定项.对于x这是代码x = x + 1.x = 0 + 1 = 1.因此main()将返回1.
如果x是在堆栈上分配的局部变量,代码肯定会以不可预测的方式工作.与数据段不同,堆栈状态几乎可以保证包含未定义的垃圾.
存储在.bss中的'x'变量,在加载程序时填充为0.因此,当程序加载到内存中时,'x'的值为0.
然后在调用main之前,执行"x = x + 1".
我不知道它是否有效,但行为并未定义.