Classes and class hierarchies
C.45
Don't define a default constructor that only initializes data members; use default member initializers instead
Reason
Using default member initializers lets the compiler generate the function for you. The compiler-generated function can be more efficient.
Example, bad
class X1 { // BAD: doesn't use member initializers
string s;
int i;
public:
X1() :s{"default"}, i{1} { }
// ...
};
Example
class X2 {
string s {"default"};
int i {1};
public:
// use compiler-generated default constructor
// ...
};
Enforcement
(Simple) Flag if a default constructor's explicit member initializer is a constant, and recommend that the constant should be written as a data member initializer instead.