09 October 2022

C++ 核心指南目录

C.45: Don’t define a default constructor that only initializes data members; use default member initializers instead

理由

使用类内成员初始式(member initializer)可以让编译器自动生成函数。编译器生成的函数效率更好。

例子

class X1 { // BAD: doesn't use member initializers
    string s;
    int i;
public:
    X1() :s{"default"}, i{1} { }
    // ...
};

例子

class X2 {
    string s {"default"};
    int i {1};
public:
    // use compiler-generated default constructor
    // ...
};

强化

  • (简单)默认构造函数不只是用常量初始化成员变量