2014-10-15 3 views
0

У меня следующий код ниже. Мне интересно, почему мой код работает и печатает 5 строк нуля. Не должны ли члены узла быть неинициализированы?Инициализация элементов класса в векторе

#include <vector> 
#include <iostream> 

struct Node{ 
    int a1; 
    int a2; 
    double b; 
    double c; 
}; 

int main(){ 
    std::vector<Node> nodevec(5); 
    for(auto s : nodevec){ 
    std::cout << s.a2 << std::endl; // prints 5 lines of 0 
    } 
    return 0; 
} 

EDIT:

Просто чтобы прояснить мой вопрос, в соответствии с http://en.cppreference.com/w/cpp/container/vector/vector, он утверждает, что «3) Создаст контейнер с подсчитанным значением инициализируется (по умолчанию сконструированного для классов) экземпляры копия Т. Нет сделаны." Так как Node является классом, не по умолчанию он построен? Не будет ли построение по умолчанию такого класса, как «Узел», означает, что его члены не инициализированы?

+0

Нет, элементы вектора получают * значение инициализированное *, которое в этом случае означает, что члены * инициализируются нулем *. – juanchopanza

+0

В цитате отсутствует какая-то важная информация. Эта ссылка более сложна: [* инициализация значения *] (http://en.cppreference.com/w/cpp/language/value_initialization). – juanchopanza

+1

исправлено @juanchopanza – Cubbi

ответ

1

Если вы читаете, например, this std::vector constructor reference вы увидите, что элементы в векторе будут инициализированы либо Node(), либо инициализированы значением. Оба они эквивалентны для типов POD и будут инициализировать значение всех членов в структуре, т. Е. Установить все члены в ноль.

0

Векторный конструктор заполнит новые элементы инициализированными значением. Инициализированный по значению объект типа без конструктора по умолчанию будет иметь все числовые элементы, инициализированные до нуля.

Смежные вопросы