Zero Initialization in C++

Setting the initial value of an object to zero is called the zero initialization.


static T object;

Tt = {} ;

T {} ;

char array [n] = " ";

Zero initialization is performed in the following situations:-

  1. 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.
  2. Zero is initialied as part of value-initialization sequence for non-class types and for members of value-initialized class types that have no constructors.
  3. 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, ach 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 initilisation 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 initialiser 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 initilisation in C++:





// C++ code to demonstrate zero initialisation
#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;





Rated as one of the most sought after skills in the industry, own the basics of coding with our C++ STL Course and master the very concepts by intense problem-solving.

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using or mail your article to See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.