Переменные структуры при ее создании конструктором заполнены нулями или мусором?

62
11 сентября 2021, 04:30

Все мы знаем, что если создать некую локальную переменную, например int a, в нее может попасть мусор и она не будет равна нулю, а может, например -2153245789. Когда мы создаем глобальные переменные, они всегда заполнены нулями или пустой строкой . А чем будут заполнены переменные (ниже из примера массив next, counter, children, isTerminal), если мы создаём их локально, изменится ли что то? Надо ли в конструкторе идти по массивам, переменным и присваивать значение 0, или всё таки оно инициализируется само?

const int E_SIZE = 26;
struct node {
    int next[E_SIZE];
    bool isTerminal;
    int children;
    int counter[E_SIZE];
    node () {
    }
};

int main() {
    //...
    vector <node> a;
    a.push_back(node());
    // a[0] теперь имеет два массива заполненные нулями, children = 0, isTerminal = false, или может попасть мусор?
    return 0;
}
Answer 1

В вашем варианте - в полях класса мусор.

Если убрать конструктор node () {} (либо заменить его на node() = default;, но обязательно в теле класса, а не снаружи), то node() будет заполнять поля нулями (так же как и node{}, и node переменная{};). А вот node переменная; будет оставлять в полях мусор.

См. https://en.cppreference.com/w/cpp/language/default_initialization , https://en.cppreference.com/w/cpp/language/value_initialization

READ ALSO
Удалить каждый второй элемент списка

Удалить каждый второй элемент списка

Вечер добрыйНужно написать функцию удаления каждого второго элемента списка

103
Ошибки при использовании функций из dll

Ошибки при использовании функций из dll

У меня есть своя dll библиотека, гдеh файл:

86
Как организовать структуру данных

Как организовать структуру данных

Пытаюсь в силу своих знаний написать движок дли игры в русские шашки на C++ (если точнее, уже по большей части написал)Требуется определить,...

94
Как сделать,чтобы после выполнения функции значение переменной сохранялось для дальнейшей работы

Как сделать,чтобы после выполнения функции значение переменной сохранялось для дальнейшей работы

У меня есть две функции, 1 для записи в файл предложения ,2 для чтения его и сохранения предложения в переменную, но когда я хочу вывести предложение...

125