15.成员初始化列表效率高的原因-灵析社区

菜鸟码转

对象的成员函数数据类型可分为语言内置类型和用户自定义类,对于用户自定义类型,利用成员初始化列表效率高。用户自定义类型如果使用类初始化列表,直接调用该成员变量对应的构造函数即完成初始化;如果在构造函数中初始化,由于 C++ 规定对象的成员变量的初始化动作发生在进入自身的构造函数本体之前,那么在执行构造函数之前首先调用默认的构造函数为成员变量设初值,在进入函数体之后,再显式调用该成员变量对应的构造函数。因此使用列表初始化会减少调用默认的构造函数的过程,效率更高一些。

C++

#include <iostream>
using namespace std;
class A
{
private:
    int val;
public:
    A()
    {
        cout << "A()" << endl;
    }
    A(int tmp)
    {
        val = tmp;
        cout << "A(int " << val << ")" << endl;
    }
};

class Test1
{
private:
    A ex;

public:
    Test1() : ex(1) // 成员列表初始化方式
    {
    }
};

class Test2
{
private:
    A ex;

public:
    Test2() // 函数体中赋值的方式
    {
        ex = A(2);
    }
};
int main()
{
    Test1 ex1;
    cout << endl;
    Test2 ex2;
    return 0;
}
/*
运行结果:
A(int 1)

A()
A(int 2)
*/
  • 说明:从程序运行结果可以看出,使用成员列表初始化的方式会省去调用默认的构造函数的过程。如果自定义的类型没有默认构造函数,此时必须使用初始化列表提供初值对这些类型进行初始化。

阅读量:2017

点赞量:0

收藏量:0