const перегрузки для operator[] в std::map/std::unordered_map

ilnur.khuziev
ilnur.khuziev

в частности std::out_of_range при отстутствии элемента в контейнере

-8
рейтинг
3 комментария
Клеванец  Игорь
en.cppreference.com/w/cpp/container/map/operator_at

Описание начинается со слов "1) Inserts a value_type object constructed in-place...". Т.е. во своей сути метод модифицирующий. Что должен будет делать метод константный?
const T& operator[]( const Key& key ) const;
Клеванец Игорь
ilnur.khuziev
Клеванец Игорь, не подклеивается на этой странице подзаголовок:
поведение простое - должны действовать аналогично at(TKey) const

мотивация - унификация. В vector есть operator[] (..) const
ilnur.khuziev
Клеванец  Игорь
ilnur.khuziev, надо просто получить ссылку на элемент... Получится большая разница между
const T& operator[]( const Key& key ) const;
T& operator[]( const Key& key );
И это может взрывать мозг людям.
struct A {
int foo(int i) const {
return m[i];
}
int foo(int i) {
return m[i];
}
std::map<int, int> m;
};
Код почти одинаковый, но делает сильно разные вещи
Клеванец Игорь
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).