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 context 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.
Default member initializer (C++11) [edit] This is the initialization performed when an object is constructed with no initializer.
Initializing a variable means specifying an initial value to assign to it (i.e., before it is used at all). Notice that a variable that is not initialized does not have a defined value, hence it cannot be used until it is assigned such a value.
Constructors are defined with a function name of this and have no return value. The grammar is the same as for the class Constructor. A struct constructor is called by the name of the struct followed by Parameters. If the ParameterList is empty, the struct instance is default initialized.
For built-in types it results in zero-initialization.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With