operator[]=

Konstantin Stupnik
Konstantin Stupnik

В данный момент невозможно (простым образом и без серьёзного overhead) разделить:

auto val = cnt[key];

и

cnt[key] = val;

 

Было бы во многих случаях очень полезно иметь выделенный оператор а-ля:

 

V& operator[]=(const K& key, V&& val);

 

Который бы вызывался только в случае:

cnt[key] = val;

 

Можно было бы создавать контейнеры защищенные от создания элемента на чтении.

 

-5
рейтинг
4 комментария
yndx-antoshkka

У контейнеров на этот случай есть метод .at(const Key&)

Нужны очень веские аргументы, чтобы вводить в язык новый оператор. Попробуйте привести пример, где без этого оператора прям никак не обойтись.

yndx-antoshkka
Konstantin Stupnik

yndx-antoshkka,

Понятно, что всё можно сделать методами с нужной семантикой. По большому счёту перегрузка операторов вообще не нужна. Вон джава живёт без перегрузки. Лично я столкнулся с необходимостью чёткого разделения чтения и записи когда делал обёртку для Vertext Buffer Array для OpenGL. Мне нужно было знать какие элементы были модифицированны, что бы заливать в видео память только изменённую часть.

С и использованием метода вместо оператора[] вычисления сложнее воспринимать.

 

Ну и по мне так это достаточно принципиальный косяк в дизайне - один оператор и на чтение и на запись. И отсутствие перегрузить отдельно именно запись является неприятным ограничением.

Konstantin Stupnik
Игорь

Konstantin Stupnik, даже если вводить этот оператор, как себя должен тогда вести объект, в котором перегружен ваш оператор и оператор= и мы вызываем []= , что тогда? Получается один из операторов будет заглушен, что уже криво и без костылей не обойтись. Никто не мешает вам сделать метод аля .get_and_set(1, "1");

Игорь
Fihtangolz

Konstantin Stupnik, напиши wrap для V, с operator =, и все будет работать ровно также как и с []= 

Fihtangolz
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения