You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中全局作用域的int x = x;是否定义良好?

全局作用域int x = x;的合法性与工作机制

是否定义良好?

这段代码是定义良好的,完全符合C++标准的规范。

工作机制详解

全局变量x属于静态存储期对象,它的初始化会经历两个固定阶段:

  1. 零初始化阶段:在程序启动的最早期,所有静态存储期对象都会被自动零初始化。此时x会被设置为0,这个过程不受显式初始化代码的影响。
  2. 显式初始化阶段:执行代码里的x = x时,右边的x已经完成了零初始化,值为0,所以赋值后x的结果仍然是0。

编译器之所以生成.zero 4的汇编代码,是因为它能识别出这个初始化逻辑等价于直接零初始化,于是做了优化,省略了冗余的赋值操作——这也是GCC和Clang编译时没有警告的原因,编译器判定这段代码合法且无未定义行为。

额外说明

对于全局作用域的静态存储期对象,零初始化是强制流程,哪怕你只写int x;,它也会被自动初始化为0。而int x = x;只是在零初始化之后,用已经初始化完成的x的值给自己再赋值一遍,最终效果和默认零初始化完全一致。


内容的提问来源于stack exchange,提问作者Jan Schultke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:14:52