Zero Initialization in C++

10 Feb, 2022
Setting the initial value of an object to zero is called the zero initialization.Syntax:  
static T object;

Tt = {} ;

T {} ;

char array [n] = " ";
Zero initialization is performed in the following situations:- 
Zero is initialized for every named variable with static or thread-local storage duration that is not subject to constant initialization (since C++14), before any other initialization.Zero is initialized as part of value-initialization sequence for non-class types and for members of value-initialized class types that have no constructors.When a character array is initialized with a string literal which is very short, the remainder of the array is zero-initialized.
Zero is initialized for every named variable with static or thread-local storage duration that is not subject to constant initialization (since C++14), before any other initialization.
Zero is initialized as part of value-initialization sequence for non-class types and for members of value-initialized class types that have no constructors.
When a character array is initialized with a string literal which is very short, the remainder of the array is zero-initialized.
The effects of zero-initialization are:  
If T is a scalar type, the object is initialized to the value obtained by converting the integer literal 0 to T.
If T is a non-union class type, each non-static data member and each base-class subobject is zero-initialized and padding is initialized to zero bits.
If T is a union type, the object’s first non-static named data member is zero-initialized and padding is initialized to zero bits.
If T is an array type, each array element is zero-initialized.
If T is a reference type, no initialization is performed.
Key Points:  
The static and thread-local variables are first zero-initialized and then initialized again as specified in the program, e.g. in the starting of a program, function-local static is first zero-initialized, and then its constructor is called when the function is first entered. If there is no initializer for the declaration of a non-class static, then default initialization does nothing, leaving the result of the earlier zero-initialization unmodified.
A pointer which is zero-initialized is called a null pointer, even if the value of the null pointer is not integral zero.
Below program illustrate zero initialization in C++:  
CPP
// C++ code to demonstrate zero initialization #include <iostream>#include <string> struct foo {    int x, y, z;}; double f[3]; // zero-initialized to three 0.0's int* p; // zero-initialized to null pointer value // zero-initialized to indeterminate value// then default-initialized to ""std::string s; int main(int argc, char* argv[]){    foo x = foo();         std::cout << x.x << x.y << x.z << '\n';         return 0;}
000
 
Reference: https://en.cppreference.com/w/cpp/language/zero_initialization 
gabaa406
chhabradhanvi
cpp-data-types
Picked
Technical Scripter 2018
C++
Technical Scripter
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Sorting a vector in C++
Polymorphism in C++
Friend class and function in C++
std::string class in C++
Pair in C++ Standard Template Library (STL)
Queue in C++ Standard Template Library (STL)
Unordered Sets in C++ Standard Template Library
List in C++ Standard Template Library (STL)
std::find in C++
Inline Functions in C++