C++哪些变量在没有显式初始化的情况下会被初始化为0

首先,我们需要明白C++程序编译链接后会包含以下几个主要段(Section)。

  • 代码段(.text):存放程序的可执行代码,通常是只读的
  • 数据段(.data):存放已初始化的全局变量和静态变量
  • BSS段(.bss):存放未初始化的全局变量和静态变量。这些变量在程序启动时自动初始化为0。
  • 只读数据段(.rodata):存放只读的全局变量和常量,比如字符串字面量和 const 变量
  • 动态链接信息段(.dynamic, .plt, .got):用于支持动态库的加载和链接
  • 符号表和字符串表段( .symtab, .strtab):存放符号表和字符串表信息

从上述的编译后分段就可以看出来,只有BSS段的内容会被自动初始化为0,那么C++中的哪些数据会再编译链接后放入BSS段呢?就是全局变量和静态变量。

一、全局变量

int g_global; // 初始化为0

二、全局静态变量

static int g_static; // 初始化为0

三、局部静态变量

int main() {
    // 局部静态变量
    static int s_local; // 初始化为0
}

四、类中的静态变量

// 类的成员变量
class Example {
public:
    int member; // 不会自动初始化
    static int static_member; // 初始化为0
};
int Example::static_member; // 初始化为0

五、仿真

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值