成员初始化

Memberwise Initialization

本文关键字:初始化 成员      更新时间:2023-10-16

可能重复:
C++初始化列表

类中按成员初始化和直接初始化之间的区别是什么?类中定义的两个构造函数之间有什么区别?

class A
{
    public:
    int x;
    int y;
    A(int a, int b) : x(a), y(b)
    {}
    A(int a, int b)
    {
        x = a;
        y = b;
    }
};

其他成员已经给出了理论答案。

务实地说,在以下情况下使用成员初始化:

  • 您的类中有一个引用属性(MyClass & mMyClass(。您需要进行成员初始化,否则,它不会编译
  • 类(const MyClass mMyClass(中有一个常量属性。您还需要进行成员初始化,否则,它不会编译
  • 您的类中有一个没有默认构造函数的属性(MyClass mMyClass没有构造函数MyClass::MyClass()(。您还需要进行成员初始化,否则,它不会编译
  • 您有一个非常大的属性对象(MyClass mMyClasssizeof(MyClass) = 1000000000(。使用成员式初始化,只需构建一次。通过在构造函数中直接初始化,它被构建了两次

第一个使用初始化,第二个不使用初始化,它使用assignment。在第二个实例中,首先默认初始化成员xy(为零(,然后分别为它们分配ab

还要注意的是,在第二个例子中,只有当成员的类型具有非平凡默认构造函数时,才默认初始化成员。否则,就不会进行初始化(正如@James在评论中指出的那样(。

现在看看这个主题就知道了:

  • 什么是C++中的非平凡构造函数