Before C++11 objects required different types of initialization based on their type:
- Fundamental types could be initialized using assignment:
int a = 42; double b = 1.2;
- Class objects could also be initialized using assignment from a single value if they had a conversion constructor (prior to C++11, a constructor with a single parameter was called a conversion constructor):
class foo { int a_; public: foo(int a):a_(a) {} }; foo f1 = 42;
- Non-aggregate classes could be initialized with parentheses (the functional form) when arguments were provided and only without any parentheses when default initialization was performed (call to the default constructor). In the next example, foo is the structure defined in the ...