Uniform initialization uses braces to give variables, containers, and complex objects a consistent initialization form. It also rejects narrowing conversions, such as silently placing a double into an int. section 3.5
Replace setup code with braces
Instead of repeatedly calling push_back to build a vector, initialize it directly with its values, then initialize the count with braces. The result is shorter and easier to read.
Uniform initialization provides:
- Consistent syntax across variable types. section 3.5
- Protection against narrowing conversions. section 3.5
- Initializer-list support for constructors and containers. section 3.5
Listing 2.10 Using in-class initialization for readability
class Complex {
private:
double real = 0; #1
double imag{0}; #2
public:
Complex() {}
Complex(double r, double i) : real(r), imag(i) {}
double getImag() const { return imag; }
};
int main() {
Complex c1; #3
// Complex c2(3); #4
Complex c3(-2, -2);
return 0;
}
Compare assignment-style and braced in-class defaults while keeping constructor-supplied values available. section 2.5

