Страницы

Поиск по вопросам

пятница, 8 февраля 2019 г.

std::map::operator[]: инициализация при обращении к несуществующему элементу

Есть такой код:
std::map m; int a = m[0];
Есть ли гарантия, что a будет содержать 0? Или есть вероятность что там будет мусор?
Общий вопрос: выполняется ли инициализация простых типов(char, int, float) при чтении несуществующего элемента map? Или там будет мусор, как это происходит с объявлениями переменных без инициализации, и нужно всегда инициализировать элементы map вручную?


Ответ

Да, гарантия есть. В "классическом" С++98 поведение такого operator[] при новом ключе x описывалось как вставка элемента make_pair(x, T()), где T - тип данных map. В вашем случае это int и выражение int() порождает нулевое значение.
Начиная с С++11 спецификация operator[] более "запутана". Выполняется конструкция пары через piecewise_construct с пустым списком аргументов для второго элемента. Для типа int такая инициализация выливается в обнуление.

Комментариев нет:

Отправить комментарий