[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_]