Нулевая инициализация в C ++

Опубликовано: 4 Декабря, 2021

Установка начального значения объекта на ноль называется нулевой инициализацией.

Синтаксис :

статический объект T;

Tt = {};

T {};

массив символов [n] = "";

Инициализация нуля выполняется в следующих ситуациях: -

  1. Ноль инициализируется для каждой именованной переменной со статической или локальной продолжительностью хранения потока, которая не подлежит постоянной инициализации (начиная с C ++ 14), перед любой другой инициализацией.
  2. Ноль инициализируется как часть последовательности инициализации значения для типов, не являющихся классами, и для членов типов классов, инициализированных значением, которые не имеют конструкторов.
  3. Когда символьный массив инициализируется очень коротким строковым литералом, остальная часть массива инициализируется нулем.

Эффекты нулевой инициализации:

  • Если T - скалярный тип, объект инициализируется значением, полученным преобразованием целочисленного литерала 0 в T.
  • Если T является типом класса без объединения, каждый нестатический член данных и каждый подобъект базового класса инициализируются нулем, а заполнение инициализируется нулевыми битами.
  • Если T является типом объединения, первый нестатический именованный член данных объекта инициализируется нулем, а заполнение инициализируется нулевыми битами.
  • Если T является типом массива, каждый элемент массива инициализируется нулем.
  • Если T - ссылочный тип, инициализация не выполняется.

Ключевые моменты :

  • Статические и локальные переменные потока сначала инициализируются нулем, а затем снова инициализируются, как указано в программе, например, при запуске программы, локальная статическая функция сначала инициализируется нулем, а затем ее конструктор вызывается, когда функция первый вошел. Если нет инициализатора для объявления статики, не являющейся классом, то инициализация по умолчанию ничего не делает, оставляя результат предыдущей нулевой инициализации неизменным.
  • Указатель, инициализированный нулем, называется нулевым указателем, даже если значение нулевого указателя не является целым нулем.

Программа ниже иллюстрирует нулевую инициализацию в 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 << xx << xy << xz << ' ' ;
return 0;
}
Выход:
000

Ссылка : https://en.cppreference.com/w/cpp/language/zero_initialization

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .