Вопрос про конструирование элемента std::unordered_map

Рассмотрим следующий код:

std::unordered_map<std::string, size_t> Counters;
// ...
++Counters[someString];

Допустим, в контейнере не было пары с заданным ключом. Тогда это приводит ко вставке в контейнер новой пары, а затем второй член пары увеличивается на единицу.

Я бы хотел знать, произойдет ли при вставке новой пары таким способом предварительная инициализация второго члена пары (счетчика типа size_t) нулем? И почему?

С одной стороны, у элементарных типов нет конструкторов, поэтому, полагаю, в счетчике может оказаться мусор. Но, с другой стороны...


Ответы (1 шт):

Автор решения: dIm0n

Да, произойдёт.

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

→ Ссылка