4

可能重复:
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;
    }
};
4

2 回答 2

6

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

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

  • 您的类中有一个引用属性( MyClass & mMyClass)。您需要按成员进行初始化,否则无法编译。
  • 你的类()中有一个常量属性。const MyClass mMyClass您还需要按成员进行初始化,否则无法编译。
  • 您的类中有一个没有默认构造函数的属性MyClass mMyClass没有构造函数MyClass::MyClass())。您还需要按成员进行初始化,否则无法编译。
  • 你有一个大得惊人的属性对象(MyClass mMyClasssizeof(MyClass) = 1000000000)。通过按成员初始化,您只需构建一次。在构造函数中直接初始化,它被构建了两次。
于 2011-07-13T17:01:37.590 回答
5

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

另请注意,在第二个中,仅当成员类型具有非平凡的默认构造函数时,才默认初始化成员。否则,没有初始化(正如@James 在评论中指出的那样)。

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

于 2011-07-13T16:55:12.177 回答