in-class initializers

In-class initializers make it a lot easier to define the constructors. Additionally, you can not forget to initialize a member.

class X {   // BAD
  int i;
  string s;
  int j;
public:
  X() :i{666}, s{"qqq"} { }   // j is uninitialized
  X(int ii) :i{ii} {}         // s is "" and j is uninitialized
  // ...
};

class X2 {
  int i {666};
  string s {"qqq"};
  int j {0};
public:
  X2() = default;        // all members are initialized to their defaults
  X2(int ii) :i{ii} {}   // s and j initialized to their defaults  (1)
  // ...
};

While the in-class initialization establishes the default behavior of an object, the constructor (1) allows the variation of the default behavior.