История изменений
Исправление eao197, (текущая версия) :
Я просто не устаю поражаться рассказам про «мне тут хорошо, уютно».
А я вот устаю от того, что вы не можете в конкретику и в предметный разговор.
что больше половины контейнеров STL таки распространяет константность на свои ссылочные поля
Давайте примеры.
Дело в том, что у C++ неконтролируемые побочные эффекты.
Афигеть, открытие. «А на третий день Зоркий Глаз заметил…»
и по итогу вызов константного метода привел к изменению объекта
Какого объекта? В вашем примере нет изменения константных объектов.
С ростом сложности картина становится хуже
Опять словеса про «сложность». Хватит щеки надувать, есть примеры – показывайте. А если нет, то можете тешить себя иллюзией о том, что ваши 10 лет опыта что-то да значат.
Здесь у константного объекта вызывается константный метод
Вы запутали сами себя. У вас ни экземпляр Container не константен, ни экземпляр Const в Container не константен.
Ну а то, что вы в const засунули мутабельные операции, так кто ж вас заставлял.
А ты, между прочим, обосрал мою идею про транзитивную константность
Потому что транзитивную константность можно сделать там, где это реально нужно. Если же ее делать просто потому, что вы хотите в C++ видеть const к которому привыкли в каком-нибудь Haskell или OCaml, то за это вам ваши коллеги спасибо, скорее всего, не скажут.
Так что вынужден повторить: «Доктор, когда я делаю вот так, то мне больно. А вы не делайте так».
Может быть я немного непонятно сказал.
В очередной раз и не немного.
Суть в том, что std::vector предоставляет к массиву такой интерфейс, будто массив имеет модификатор const. Но этот массив под капотом не является const.
Повторю еще раз: потроха реализации vector имеют к видимой семантике лишь косвенное отношение.
Исходная версия eao197, :
Я просто не устаю поражаться рассказам про «мне тут хорошо, уютно».
А я вот устаю от того, что вы не можете в конкретику и в предметный разговор.
что больше половины контейнеров STL таки распространяет константность на свои ссылочные поля
Давайте примеры.
Дело в том, что у C++ неконтролируемые побочные эффекты.
Афигеть, открытие. «А на третий день Зоркий Глаз заметил…»
и по итогу вызов константного метода привел к изменению объекта
Какого объекта? В вашем примере нет изменения константных объектов.
С ростом сложности картина становится хуже
Опять словеса про «сложность». Хватит щеки надувать, есть примеры – показывайте. А если нет, то можете тешить себя иллюзией о том, что ваши 10 лет опыта что-то да значат.
Здесь у константного объекта вызывается константный метод
Вы запутали сами себя. У вас ни экземпляр Container не константен, ни экземпляр Const в Container не константен.
Ну а то, что вы в const засунули мутабельные операции, так кто ж вас заставлял.
А ты, между прочим, обосрал мою идею про транзитивную константность
Потому что транзитивную константность можно сделать там, где это реально нужно. Если еже ее делать просто потому, что вы хотите в C++ видеть const к которому привыкли в каком-нибудь Haskell или OCaml, то за это вам ваши коллеги спасибо, скорее всего, не скажут.
Так что вынужден повторить: «Доктор, когда я делаю вот так, то мне больно. А вы не делайте так».
Может быть я немного непонятно сказал.
В очередной раз и не немного.
Суть в том, что std::vector предоставляет к массиву такой интерфейс, будто массив имеет модификатор const. Но этот массив под капотом не является const.
Повторю еще раз: потроха реализации vector имеют к видимой семантике лишь косвенное отношение.