Re[4]: const в D, требуется помощь клуба.
От: c-smile Канада http://terrainformatica.com
Дата: 05.07.05 23:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, c-smile, Вы писали:


CS>>Я ж про это и говорю.


CS>>
CS>>const char[] - immutable.
CS>>      char[] - mutable. 
CS>>


VD>immutable — это характиристика типа. const же всего лишь предохраняет от модификации переменной.


C точки зрения формальной логики

class A{...}; 
const A a;


const A есть образование нового типа A' у которого отсутвуют (или закрыты) все мутирующие методы.

immutability может быть "ручной" и "автоматической" — в С# доступна только "ручная". В C++ и первая и вторая.


CS>>В C# и Java проблема (проблема ли?) — нет понятия deep immutable:

CS>>
CS>>int foo(in MyClass cls)
CS>>


CS>>in защищает от изменения переменную cls в вызывающей процедуре

CS>>но сам объект передаваемый — конем гуляй по нему.

VD>Объект или передается по значению и тогда хоть обмодифицируйся. Или по ссылке. При этом возмжность модификации объекта зависит от того ползволяет ли он себя модифицировать.


VD>Например, попроубуй изменить в C# строку или значение типа DateTimr.


Я ж и говорю — зависит от ручной импелементации. В Java например String immutable а DateTime — нет.
Автоматической — нет.


CS>>const MyClass& cls в C++ означает что для cls объекта в классе

CS>>MyClass подавлены все изменяющие методы.

VD>Нет. cls означет, что ссылка недопускает модфикации объекта. В то же время всегда можно создать новую ссылку или указатель и модифицировать через него тот же объект. Модифицировать же immutable-объект невозможно.


Мы говорим не про mutability enforcment, а про нормальное использование.
Из-за того что в C++ используется deep immutability который(ая) есть вещь суровая, то для практических целей оставлен
const_cast<> — явное снятие immutability.

Полный режим readonly возможен только на хардверном уровне.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.