LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Я просто не устаю поражаться рассказам про «мне тут хорошо, уютно».

А я вот устаю от того, что вы не можете в конкретику и в предметный разговор.

что больше половины контейнеров STL таки распространяет константность на свои ссылочные поля

Давайте примеры.

Дело в том, что у C++ неконтролируемые побочные эффекты.

Афигеть, открытие. «А на третий день Зоркий Глаз заметил…»

и по итогу вызов константного метода привел к изменению объекта

Какого объекта? В вашем примере нет изменения константных объектов.

С ростом сложности картина становится хуже

Опять словеса про «сложность». Хватит щеки надувать, есть примеры – показывайте. А если нет, то можете тешить себя иллюзией о том, что ваши 10 лет опыта что-то да значат.

https://godbolt.org/z/qhjfaeT5M

Здесь у константного объекта вызывается константный метод

Вы запутали сами себя. У вас ни экземпляр Container не константен, ни экземпляр Const в Container не константен.

Ну а то, что вы в const засунули мутабельные операции, так кто ж вас заставлял.

А ты, между прочим, обосрал мою идею про транзитивную константность

Потому что транзитивную константность можно сделать там, где это реально нужно. Если же ее делать просто потому, что вы хотите в C++ видеть const к которому привыкли в каком-нибудь Haskell или OCaml, то за это вам ваши коллеги спасибо, скорее всего, не скажут.

Так что вынужден повторить: «Доктор, когда я делаю вот так, то мне больно. А вы не делайте так».

Может быть я немного непонятно сказал.

В очередной раз и не немного.

Суть в том, что std::vector предоставляет к массиву такой интерфейс, будто массив имеет модификатор const. Но этот массив под капотом не является const.

Повторю еще раз: потроха реализации vector имеют к видимой семантике лишь косвенное отношение.

Исходная версия eao197, :

Я просто не устаю поражаться рассказам про «мне тут хорошо, уютно».

А я вот устаю от того, что вы не можете в конкретику и в предметный разговор.

что больше половины контейнеров STL таки распространяет константность на свои ссылочные поля

Давайте примеры.

Дело в том, что у C++ неконтролируемые побочные эффекты.

Афигеть, открытие. «А на третий день Зоркий Глаз заметил…»

и по итогу вызов константного метода привел к изменению объекта

Какого объекта? В вашем примере нет изменения константных объектов.

С ростом сложности картина становится хуже

Опять словеса про «сложность». Хватит щеки надувать, есть примеры – показывайте. А если нет, то можете тешить себя иллюзией о том, что ваши 10 лет опыта что-то да значат.

https://godbolt.org/z/qhjfaeT5M

Здесь у константного объекта вызывается константный метод

Вы запутали сами себя. У вас ни экземпляр Container не константен, ни экземпляр Const в Container не константен.

Ну а то, что вы в const засунули мутабельные операции, так кто ж вас заставлял.

А ты, между прочим, обосрал мою идею про транзитивную константность

Потому что транзитивную константность можно сделать там, где это реально нужно. Если еже ее делать просто потому, что вы хотите в C++ видеть const к которому привыкли в каком-нибудь Haskell или OCaml, то за это вам ваши коллеги спасибо, скорее всего, не скажут.

Так что вынужден повторить: «Доктор, когда я делаю вот так, то мне больно. А вы не делайте так».

Может быть я немного непонятно сказал.

В очередной раз и не немного.

Суть в том, что std::vector предоставляет к массиву такой интерфейс, будто массив имеет модификатор const. Но этот массив под капотом не является const.

Повторю еще раз: потроха реализации vector имеют к видимой семантике лишь косвенное отношение.