Нулевая инициализация в C ++
Опубликовано: 4 Декабря, 2021
Установка начального значения объекта на ноль называется нулевой инициализацией.
Синтаксис :
статический объект T; Tt = {}; T {}; массив символов [n] = "";
Инициализация нуля выполняется в следующих ситуациях: -
- Ноль инициализируется для каждой именованной переменной со статической или локальной продолжительностью хранения потока, которая не подлежит постоянной инициализации (начиная с C ++ 14), перед любой другой инициализацией.
- Ноль инициализируется как часть последовательности инициализации значения для типов, не являющихся классами, и для членов типов классов, инициализированных значением, которые не имеют конструкторов.
- Когда символьный массив инициализируется очень коротким строковым литералом, остальная часть массива инициализируется нулем.
Эффекты нулевой инициализации:
- Если 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 и многому другому, см. Полный курс подготовки к собеседованию .