Это правда.У вас есть инициализация с выражением присваивания справа:
someValueType & value = (map["key"] = someValueType());
Фактически это эквивалентно:
someValueType & value = map["key"];
Это потому, что оператор []
создает новыйэлемент, если он еще не существует для этого ключа.
Привязка записи карты к константной ссылке не имеет значения.Однако, если вы знаете, что ключ гарантированно существует, то вы можете связать константную ссылку с отображенным значением, даже если у вас есть только постоянная ссылка на саму карту:
void (MapType const & m)
{
someValueType const & = m.find("key")->second;
}
Это будетошибка, конечно, если ключ не существует, так как вы разыменовываете конечный итератор.