Пространства имён
Варианты
Действия

zero initialization

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Устанавливает начальное значение объекта к нулю
Оригинал:
Sets the initial value of an object to zero
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Синтаксис

static T object ; (1)
int () ; (2)
char array [ n ] = ""; (3)

[править] Объяснение

Нулевая инициализация выполняется в следующих ситуациях:
Оригинал:
Zero initialization is performed in the following situations:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
1)
Для каждого имени переменной со статическим или локальной памяти потока продолжительности, перед любой другой инициализации.
Оригинал:
For every named variable with static or thread-local storage duration, before any other initialization.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
2)
В рамках Значение инициализации последовательности для не-класса типов и членов стоимости инициализируется класс типов, которые не имеют конструкторов.
Оригинал:
As part of Значение инициализации sequence for non-class types and for members of value-initialized class types that have no constructors.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
3)
Когда персонаж массив инициализируется строковой литерал, который является слишком коротким, остальная часть массива равна нулю инициализирован.
Оригинал:
When a character array is initialized with a string literal that is too short, the remainder of the array is zero-initialized.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Эффект нулевой инициализации являются:
Оригинал:
The effects of zero initialization are:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если T это скалярный тип, начальное значение объекта является неотъемлемой постоянной неявно преобразованы нуля до T.
    Оригинал:
    If T is a scalar type, the object's initial value is the integral constant zero неявно преобразованы to T.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если T это не состоящих в профсоюзе типа класса, все базовые классы и не статические данные члены равны нулю инициализирован, и все обивка инициализируется нулевыми битами. Конструкторов, если таковые имеются, игнорируются.
    Оригинал:
    If T is an non-union class type, all base classes and non-static data members are zero-initialized, and all padding is initialized to zero bits. The constructors, if any, are ignored.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если T является объединением типа, первый нестатических имени члена данных равна нулю инициализируется и вся обивка инициализируется нулевыми битами.
    Оригинал:
    If T is a union type, the first non-static named data member is zero-initialized and all padding is initialized to zero bits.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если T является типом массива, каждый элемент равен нулю инициализирован
    Оригинал:
    If T is array type, each element is zero-initialized
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если T это ссылочный тип, ничего не делается.
    Оригинал:
    If T is reference type, nothing is done.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Notes

Статической и потоков локальных переменных первого нуля инициализации, а затем инициализируется заново, как указано в программе, например, Функция-местный статического первый нулевой инициализируется при запуске программы, а затем его конструктор вызывается, когда функция впервые вошел. Если заявление о не-класс не имеет статической инициализации, то инициализации по умолчанию ничего не делает, оставляя результате ранее нулевого инициализации немодифицированных.
Оригинал:
The static and thread-local variables are first zero-initialized and then initialized again as specified in the program, e.g. a function-local static is first zero-initialized at program startup, and then its constructor is called when the function is first entered. If the declaration of a non-class static has no initializer, then default initialization does nothing, leaving the result of the earlier zero-initialization unmodified.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Нуль-указатель инициализируется нулевым значением указателя в своем роде, даже если значение нулевого указателя не является целым нуля.
Оригинал:
A zero-initialized pointer is the null pointer value of its type, even if the value of the null pointer is not integral zero.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример

#include <string>
 
double f[3]; // zero-initialized to three 0.0's
int* p;   // zero-initialized to null pointer value
std::string s; // zero-initialized to indeterminate value
               // then default-initialized to ""
int main(int argc, char* argv[])
{
    static int n = argc; // zero-initialized to 0
                         // then copy-initialized to argc
    delete p; // safe to delete a null pointer
}


[править] См. также