📜  什么时候在C++中使用初始化器列表?(1)

📅  最后修改于: 2023-12-03 14:49:08.017000             🧑  作者: Mango

什么时候在C++中使用初始化器列表?

在C++中,初始化器列表是在对象或结构体创建时为其成员变量或子对象分配初始值的一种便捷方式。初始化器列表的语法是在对象或结构体的构造函数后面,使用冒号分隔。

何时使用初始化器列表?
1. 初始化非静态const成员变量

当类中有非静态const成员变量时,必须在对象创建时初始化,否则会引发编译错误。这时,初始化器列表就是唯一的选择。

class MyClass {
public:
    const int m_num;
    MyClass(int num) : m_num(num) {}
};
2. 初始化静态成员变量

静态成员变量是在类级别声明的存储在静态存储区域的变量。它们可以是常量或变量。初始化静态成员变量需要使用初始化器列表。

class MyClass {
public:
    static const int s_num;
};
const int MyClass::s_num = 42;
3. 初始化引用类型成员变量

如果一个类包含引用类型的成员变量,则需要在创建对象时为其分配初始值。这时,初始化器列表是唯一可以实现这一目的的方式。

class MyClass {
public:
    int& m_ref;
    MyClass(int& ref) : m_ref(ref) {}
};
4. 初始化成员对象

在类定义内,如果成员是对象类型,则必须在构造函数内初始化。初始化器列表是实现这个目的的最好方式。

class MyClassA {
public:
    MyClassA() {}
};
class MyClassB {
public:
    MyClassB(MyClassA& a) : m_a(a) {}
private:
    MyClassA m_a;
};
结论

初始化器列表是在C++中初始化对象和结构体成员的最佳方式。使用它可以使代码更容易阅读和维护,同时还能提高性能。 因此,它应该在上述情况下被用来初始化成员。