updogliu
updogliu

Reputation: 6255

Does "int a = int();" necessarily give me a zero?

Does int a = int(); necessarily give me a zero?

How about if int is replaced by char, double, bool or pointer type?

Where is this specified in the language standard, please?

Upvotes: 8

Views: 501

Answers (2)

Alok Save
Alok Save

Reputation: 206566

Does int a = int(); necessarily give me a zero?

Yes, the standard guarantees that it gives you zero.
This is known as Value Initialization. For the type int, Value Initialization basically ends up being an Zero Initialization.

Where is this specified in the language standard, please?

The rules are clearly specified in the standard in section 8.5. I will quote the relevant ones to the Q here:

C++03: 8.5 Initializers
Para 7:

An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.

Value Initialization & Zero Initialization are defined in 8.5 Para 5 as:

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;
— if T is an array type, then each element is value-initialized;
otherwise, the object is zero-initialized

To zero-initialize an object of type T means:

if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;
— if T is a non-union class type, each nonstatic data member and each base-class subobject
is zero-initialized;
— if T is a union type, the object’s first named data member is zero-initialized;
— if T is an array type, each element is zero-initialized;
— if T is a reference type, no initialization is performed.

Note: The bold texts are emphasized by me.

Upvotes: 18

orlp
orlp

Reputation: 117771

Yes, any built-in type is always initialized to zero when default-initialized. Keep in mind that in most scenarios a built-in type is not default initialized so this won't necessarily print out 0:

int i;
std::cout << i << "\n";

Upvotes: -1

Related Questions