C++ 对象初始化

列表初始化

形式:

[new] T [object] { arg1, arg2, ... };
  • 如果T是aggregate类型,那么就用arg参数逐个初始化T的成员,如果T的成员个数大于arg参数的数目,剩下的成员执行值初始化。
  • 如果T不是aggregate类型,那么编译器查找最匹配list参数的T的构造函数。

值初始化和默认初始化

值初始化形式:

[new] T [object] {};

默认初始化形式:

[new] T object;

二者区别:
- 只要使用了括号(圆括号或花括号),就是值初始化。可以简单理解为括号提醒编译器你想要用某个值赋给对象。没有使用括号,就是默认初始化。可以简单理解成,你不加任何东西,编译器就会使用默认的行为。
- 默认初始化:总是试图使用默认构造函数初始化对象。但是它对于POD类型则不这么做。比如:C基本类型,聚合类型,POD类型的数组。C语言的struct以及基本类型如果不初始化也是随机的值,和这个POD类型在C++类似。我们可以简单理解为:总使用默认构造函数,同时兼容C。值初始化:有用户定义构造函数,就执行用户定义的构造函数,否则都使用零初始化。

直接初始化

直接使用构造函数进行初始化。

拷贝初始化

使用等号,要求编译器将右侧运算对象拷贝到正在创建的对象中,调用拷贝构造函数。

参考资料:
https://www.zhihu.com/question/36735960
http://vbill.github.io/2016/11/14/cpp-init/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值