Вопрос про конструирование элемента std::unordered_map
Рассмотрим следующий код:
std::unordered_map<std::string, size_t> Counters;
// ...
++Counters[someString];
Допустим, в контейнере не было пары с заданным ключом. Тогда это приводит ко вставке в контейнер новой пары, а затем второй член пары увеличивается на единицу.
Я бы хотел знать, произойдет ли при вставке новой пары таким способом предварительная инициализация второго члена пары (счетчика типа size_t) нулем? И почему?
С одной стороны, у элементарных типов нет конструкторов, поэтому, полагаю, в счетчике может оказаться мусор. Но, с другой стороны...
Ответы (1 шт):
Да, произойдёт.
https://en.cppreference.com/w/cpp/container/unordered_map/operator_at
When the default allocator is used, this results in the key being copy constructed from key and the mapped value being value-initialized.
https://en.cppreference.com/w/cpp/language/value_initialization
otherwise, the object is zero-initialized.
https://en.cppreference.com/w/cpp/language/zero_initialization
If T is a scalar type, the object's initial value is the integral constant zero explicitly converted to T.
P.S.: не забывайте указывать std:: для std::size_t