Possible Duplicate:
What do the following phrases mean in C++: zero-, default- and value-initialization?
I was reading this answer, so I came across the second word : value-initialize
. Initially I thought this is same as default-initialize
but the c开发者_JS百科ontext hints me that I'm wrong.
So my question is :
What is the difference between default-initialize and value-initialize?
I would like to understand the difference with some examples.
According to the standard (8.5/4,5):
To default-initialize an object of type T means:
— if T is a non-POD class type the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.
To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized;96)
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized
"default-initialise" gives it the default value as specified by the standard, which could be garbage.
"value-initialise" initialises it to a specific value - one set in the constructor, for instance, or optimised by the compiler.
精彩评论