Здравствуйте, Evgeny.Panasyuk, Вы писали: EP>Это понятно. В STL есть отдельный метод find который не создаёт ничего, а только ищет. EP>А вообще, вот такое поведение, где operator[] создаёт default в случае отсутствия — очень удобно. Потому что обычно default является нейтральным элементом относительно применяемых операций. Простой пример это подсчёт количества вхождений — ++count[id], или например конкатенация строк result_string[id] += s;, или случай ТС со вложенными контейнерами.
А для классов default(T) будет null. И не всегда нужен 0 по умолчанию для чисел.
По уму нужно передавать в конструктор словаря конструктор значения по умолчанию.
Тогда
d.GetOrAdd(ключ) будет возвращать значение по умолчанию. И логика понятна.
и солнце б утром не вставало, когда бы не было меня