1. 初始化基本数据类型成员变量

使用初始化列表:

Example(int n) : num(n) {}

不使用初始化列表:

Example(int n) {
    num = n;
}

在这种情况下,两种方式的效果是一样的,但是使用初始化列表更加简洁和高效。

2. 初始化对象类型成员变量

使用初始化列表:

Point(int a, int b) : x(a), y(b) {}
Rectangle(int x1, int y1, int x2, int y2) : topLeft(x1, y1), bottomRight(x2, y2) {}

不使用初始化列表:

Point(int a, int b) {
    x = a;
    y = b;
}
Rectangle(int x1, int y1, int x2, int y2) {
    topLeft = Point(x1, y1);
    bottomRight = Point(x2, y2);
}

使用初始化列表的方式更加简洁和高效,因为它避免了对象的默认构造和赋值构造,直接在构造函数中进行初始化。

3. 初始化引用类型成员变量

使用初始化列表:

Example(int &r) : ref(r) {}

不使用初始化列表:

Example(int &r) {
    ref = r;
}

在这种情况下,必须使用初始化列表来初始化引用类型成员变量,因为引用在创建时必须初始化,而不能在构造函数的主体中再次赋值。

4. 初始化常量成员变量

使用初始化列表:

Example() : value(100) {}

不使用初始化列表:

Example() {
    value = 100;
}

在这种情况下,必须使用初始化列表来初始化常量成员变量,因为常量在创建后不能再次赋值。

5. 初始化基类

使用初始化列表:

Derived(int n1, int n2) : Base(n1), derivedNum(n2) {}

不使用初始化列表:

Derived(int n1, int n2) : derivedNum(n2) {
    Base(n1); // 调用基类构造函数
}

使用初始化列表的方式更加直观和高效,因为它可以显式地调用基类的构造函数,并且避免了默认构造和赋值构造。

6. 初始化成员变量数组

使用初始化列表:

Example() : array{1, 2, 3, 4, 5} {}

不使用初始化列表:

Example() {
    array[0] = 1;
    array[1] = 2;
    array[2] = 3;
    array[3] = 4;
    array[4] = 5;
}

在这种情况下,使用初始化列表更加简洁和高效,因为它可以一次性对数组进行初始化,而不需要逐个赋值。