Pull to refresh

Comments 6

Примение Immutable, говорит что объект не должен меняться.

применение const говорит, что объект не должен меняться
Дополнительный уровень защиты

Оверхед

У вас два пункта противоречат друг другу. Либо для передачи immutable по const& будет происходить копия, либо допустим точно такой же хак с const_cast'ом для изменения внутреннего объекта.
Это вопрос вопрос вкуса, но представляется, что выражение вида
Immutable<Type **> p(...);
выглядит понятнее чем
const Type *const *const p = …;

Не выглядит. Рядовой c++ программист прекрасно знает что такое const, а шаблон Immutable ему придется изучить. А потом еще часами чесать репу чтобы понять, зачем вообще этот шаблон нужен и используется, кроме как по прихоти автора.
UFO just landed and posted this here
в приведенном примере проблема не в том, что b не иммутабелен, а в том, что g() имеет неявный побочный эффект. Если уж говорить о перетаскивании парадигм ФП в с++, то давайте начнем с чистых функций?

Const примененный непосредственно к обьекту (а не ссылке на обьект) отлично все говорит о его иммутабельности. Существование не -const ссылок — о mutaбельности со стороны кода который ими владеет. И если создавать иммутабельный обьект копированием то достаточно собственно просто создать const-обьект копированием. Причем это можно сделать прямо в аргументах функции, просто из традиционной конструкции const X& амперсанд убираете и все.

Вы опять упустили главное, а именно принципиальное отличие const от immutable.


Указание const в аргументах функции означает, что функция не может изменить значение передаваемой по ссылке переменной. При этом функцию мало волнует внешний код.


А передача immutable означает, что ни функция, ни внешний код не могут изменить значение переменной в процессе выполнения функции. Здесь immutable является контрактом.


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

Sign up to leave a comment.

Articles

Change theme settings