值初始化(value initialization)和默认初始化(default initialization)的区别

在 C++ 中,值初始化(value initialization)和默认初始化(default initialization)是两种不同的对象初始化方式,主要区别体现在初始化行为和适用场景上:

1. 默认初始化(Default Initialization)

当对象被创建时未指定初始值,且没有显式构造函数时触发:

  • 对于内置类型(如intdouble等):不进行初始化,其值是未定义的(可能是随机垃圾值)。
  • 对于类类型:会调用其默认构造函数(无参构造函数)进行初始化。

2. 值初始化(Value Initialization)

通过空初始化器(){})显式触发,或在某些特定场景下自动触发(如容器初始化、局部静态变量没有显式的初始值):

  • 对于内置类型:会被初始化为零(零初始化)。
  • 对于类类型
    • 若有默认构造函数,调用默认构造函数。
    • 若没有默认构造函数但有其他构造函数,会尝试用空参数列表调用构造函数(可能报错)。
    • 若为聚合类型(如结构体),会对每个成员进行值初始化。

核心区别总结

对比项默认初始化值初始化
触发方式未指定初始值使用(){},或特定场景自动触发
内置类型行为未定义值零初始化(值为 0)
类类型行为调用默认构造函数调用默认构造函数(或按规则初始化)
安全性内置类型可能产生垃圾值确保对象处于明确初始状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值