c++系列 - 变量初始化

拷贝初始化

int a = 5;

直接初始化

int a(5);

对于基本类型(int,double等),直接初始化和拷贝初始化效率一样。但对于复杂类型,直接初始化效率比拷贝初始化效率高。
直接初始化不支持所有类型的初始化,例如一个包含列表类型的对象。

花括号初始化

int a { 5 };     // 推荐
int a = { 5 };

花括号初始化,不允许隐式转换。例如:

int a = { 4.5 };

如果是拷贝和直接初始化,小数部分会被舍弃。但花括号初始化,会无法通过编译。

总结

花括号统一了初始化方式:

[new] T [object] { arg1, arg2, ... };
  1. 花括号内的参数不全时,称为值初始化,根据T的类型进行初始化
  2. 没有花括号时,称为默认初始化 。此时:
    非class类型变量(int, double, …):如果是全局变量,此时会转为值初始化。如果是局部变量,该值是不确定的。
    class类型变量(string, object, …):调用默认构造函数进行初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值