[class.expl.init] (original) (raw)
11 Classes [class]
11.9 Initialization [class.init]
11.9.2 Explicit initialization [class.expl.init]
An object of class type can be initialized with a parenthesizedexpression-list, where theexpression-listis construed as an argument list for a constructor that is called to initialize the object.
Either direct-initialization semantics or copy-initialization semantics apply; see [dcl.init].
[Example 1: struct complex { complex(); complex(double); complex(double,double);}; complex sqrt(complex,complex); complex a(1); complex b = a; complex c = complex(1,2); complex d = sqrt(b,c); complex e; complex f = 3; complex g = { 1, 2 }; — _end example_]
[Note 1:
Overloading of the assignment operator ([over.assign]) has no effect on initialization.
— _end note_]
An object of class type can also be initialized by abraced-init-list.
[Example 2: complex v[6] = { 1, complex(1,2), complex(), 2 };
Here,complex::complex(double)is called for the initialization ofv[0]andv[3],complex::complex(double, double)is called for the initialization ofv[1],complex::complex()is called for the initialization ofv[2],v[4], andv[5].
For another example,
struct X { int i;float f; complex c;} x = { 99, 88.8, 77.7 };
Here,x.iis initialized with 99,x.fis initialized with 88.8, andcomplex::complex(double)is called for the initialization ofx.c.
— _end example_]
[Note 2:
Braces can be elided in theinitializer-listfor any aggregate, even if the aggregate has members of a class type with user-defined type conversions; see [dcl.init.aggr].
— _end note_]
[Note 3:
IfTis a class type with no default constructor, any initializing declaration of an object of typeT(or array thereof) is ill-formed if noinitializeris explicitly specified (see [class.init] and [dcl.init]).
— _end note_]