关于C++代码书写时,注意的小问题(持续更新)

本文介绍了列表初始化在C++中的优势,包括减少拷贝、提高速度,以及在特定情况下如引用成员、const成员、基类构造等必须使用初始化列表的情况。同时,强调了使用nullptr替代NULL以避免二义性。

1、优先使用列表初始化,而不是构造函数内初始化。

 1、列表初始化会比直接使用构造函数初始化快。因为减少了不必要的拷贝。
  通过初始化列表去初始化成员,只会调用该成员的拷贝构造函数(成员类型是某类类型)或者对应的构造函数(成员类型是内置类型)。而构造函数内初始化,会先调用类A的默认构造函数(无参构造函数),再调用类A的赋值运算符。
  另外进入到类对应的构造函数体内后,编译器首先会插入一些对成员变量的初始化,编译器会隐形的对未初始化的成员变量进行默认初始化,然后才是执行类对应的构造函数的函数体。这里可能会对成员变量进行了额外的初始化。
 2、以下情况需要使用列表初始化
  当初始化一个reference member时,即成员类型是引用。
  当初始化一个const member时,即成员类型是常量。
  当调用一个基类的constructor,而它拥有一组参数时。如果此时不使用列表初始化,那么就需要自己重载赋值运算符。
  当调用一个类成员的constructor,而它拥有一组参数时。
  若某个类成员没有定义无参构造函数,而定义了其它的构造函数,也必须使用初始化列表。
  但是注意列表初始化顺序不是按照初始化列表的顺序来的,而是按照类成员的声明顺序,

2、使用nullptr,而不是NULL

  因为NULL,在C++中是0,这里是为了避免二义性

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值