Re[9]: auto и proxy-объекты
От: so5team https://stiffstream.com
Дата: 13.11.25 07:27
Оценка:
Здравствуйте, Marty, Вы писали:

S>>Значит и вы, и ваши пользователи должны страдать, ибо нарушается принцип наименьшего удивления.


M>И в чем же нарушение?


В том, что после того, как вы нашли объект в контейнере и делаете что-то с этим самым объектом (не с контейнером, и не с ключом объекта), то у вас меняется видимое пользователю содержимое объекта.

Т.е. вполне можно понять, когда сам по себе operator[] для map может изменить порядок следования (скажем, если operator[] обновляет "метку времени" последнего обращения к объекту). Но когда это делает не operator[], а последующие действия с самим объектом, то это из категории "внезапно".

Кроме того, как я понимаю, у вас вот такая ситуация:
struct A {
  int _a;
  long _b;
};

Marty::TrickyMap<int, A> map;
...
map[ 0 ] = A{ ._a = 3, ._b = 4 };

будет менять порядок следования элементов, т.к. вы видите полную замену содержимого. Но вот так:
map[ 0 ]->_a = 3;
map[ 0 ]->_b = 4;

порядок следования уже не поменяется. Хотя объект полностью изменит свое содержимое.

M>Да, это выглядит интересно. А как такая конструкция называется, и в каких разделах описана?


https://en.cppreference.com/w/cpp/language/member_functions.html -- в разделе Member functions with ref-qualifier
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.