Есть такой код:
std::map
Есть ли гарантия, что a будет содержать 0? Или есть вероятность что там будет мусор?
Общий вопрос: выполняется ли инициализация простых типов(char, int, float) при чтении несуществующего элемента map? Или там будет мусор, как это происходит с объявлениями переменных без инициализации, и нужно всегда инициализировать элементы map вручную?
Ответ
Да, гарантия есть. В "классическом" С++98 поведение такого operator[] при новом ключе x описывалось как вставка элемента make_pair(x, T()), где T - тип данных map. В вашем случае это int и выражение int() порождает нулевое значение.
Начиная с С++11 спецификация operator[] более "запутана". Выполняется конструкция пары через piecewise_construct с пустым списком аргументов для второго элемента. Для типа int такая инициализация выливается в обнуление.
Комментариев нет:
Отправить комментарий