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

被折叠的 条评论
为什么被折叠?



