成员初始化列表
在 C++ 中,成员初始化列表是用于初始化类对象成员的语法结构,它在对象的构造函数中使用。使用成员初始化列表而不是在构造函数体中赋值有几个好处:
- 效率:对于非内置类型的成员,使用成员初始化列表可以直接调用成员的构造函数,而不是先调用默认构造函数再调用赋值操作。
- 必要性:对于
const
或引用成员,必须使用成员初始化列表,因为这些类型的成员变量一旦定义就必须初始化,无法在构造函数体内赋值。 - 规范:成员初始化的顺序只与成员在类中声明的顺序有关,而不是它们在初始化列表中出现的顺序。
下面是一个使用成员初始化列表的例子:
#include <iostream>
#include <string>
#include <vector>
class ExampleClass {
public:
ExampleClass(int id, const std::string& name)
: id(id), name(name), numbers({1, 2, 3}) // 使用成员初始化列表初始化成员变量
{
// 构造函数体可以用来执行其他初始化任务
std::cout << "Object created with id = " << id << " and name = " << name << std::endl;
}
void printNumbers() const {
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
}
private:
int id;
std::string name;
std::vector<int> numbers;
};
int main() {
ExampleClass example(1, "Initialization List Example");
example.printNumbers();
return 0;
}
在这个例子中,ExampleClass
有三个成员:一个 int
、一个 std::string
和一个 std::vector<int>
。这些成员通过在构造函数后的冒号(:
)之后使用成员初始化列表进行初始化。这种方式比在构造函数体内部分配值更加高效,并且对于 const
和引用成员是必须的。在 main
函数中创建了 ExampleClass
的一个实例,并调用了 printNumbers
方法来显示 numbers
向量的内容。