开发者

Difference between default-initialize and value-initialize? [duplicate]

开发者 https://www.devze.com 2023-02-23 02:36 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: What do the following phrases mean in C++: zero-, default- and value-initialization?
This question already has answers here: Closed 11 years ago.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消