在
C++
中,使用初始化列表来初始化类的字段是一种高效的初始化方式,尤其在构造函数中。初始化列表 直接在对象的构造过程中初始化成员变量,而不是先创建成员变量后再赋值。这对于提高性能尤其重 要,特别是在涉及到复杂对象或引用和常量成员的情况下。
初始化列表紧跟在构造函数参数列表后面,以冒号(
:
)开始,后跟一个或多个初始化表达式,每个表 达式通常用逗号分隔。下面是使用初始化列表初始化字段的例子:
#include <iostream>
using namespace std;
class Car{
public:
string brand;
string type;
int year;
Car(string b,string t,int y):brand(b),type(t),year(y){
cout << "参数列表的方式进行构造" <<endl;
}
Car(){
cout << "构造函数被调用" <<endl;
}
Car(string b, int y){
cout << "带参的构造函数被调用" <<endl;
brand = b;
year = y;
}
Car(string b){
cout << "带一个参数的构造函数被调用" <<endl;
brand = b;
}
void display(){
cout << "Brand:" << brand <<",year:" << year << endl;
}
void displayAll(){
cout << "Brand:" << brand <<",year:" << year << ",Type" << type <<endl;
}
};
int main()
{
Car car;
car.brand = "宝马";
car.year = 2023;
car.display();
Car car2;
car2.year = 2023;
car2.display();
Car car3("奇瑞","风云2",2014);
car3.displayAll();
Car *pcar = new Car("捷豹",2024);
pcar->display();
return 0;
}
在这个例子中, Car
有三个成员变量: brand
( string
类型)、 type
( string
类型)和 year
( int
类型)。当创建 C
ar
的一个实例时,我们通过构造函数传递三个参数,这些参数
被用于通过初始化列表直接初始化成员变量。初始化列表 :brand(b),type(t),year(y) 的意思是用 b
初始化 brand ,用 t
初始化 type
,用 y
初始化 year
。
初始化列表的优点包括:
1.
效率
:对于非基本类型的对象,使用初始化列表比在构造函数体内赋值更高效,因为它避免了先默
认构造然后再赋值的额外开销。
2.
必要性
:对于引用类型和常量类型的成员变量,必须使用初始化列表,因为这些类型的成员变量在
构造函数体内不能被赋值。
3.
顺序
:成员变量的初始化顺序是按照它们在类中声明的顺序,而不是初始化列表中的顺序。
使用初始化列表是
C++
中推荐的初始化类成员变量的方式,因为它提供了更好的性能和灵活性。