Привет, Хабр! Об иммутабельных данных немало говориться, но о реализации на С++ найти что-то сложно. И, потому, решил данный восполнить пробел в дебютной статье. Тем более, что в языке D есть, а в С++ – нет. Будет много кода и много букв.
О стиле – служебные классы и метафункции используют имена в стиле STL и boost, пользовательские классы в стиле Qt, с которой я в основном и работаю.
Что из себя представляют иммутабельные данные? Иммутабельные данные – это наш старый знакомый **const**, только более строгий. В идеале иммутабельность означает контекстно-независиую неизменяемость ни при каких условиях.
По сути иммутабельные данные должны:
* обеспечивать физическую и логическую константность;
* запрещать присваивание нового значения на этапе компиляции;
все операции должны проводиться над копией, а не над оригиналом.
Иммутабельные данные пришли из функционального программирования и нашли место в параллельном програмировании, т. к. гарантируют отсутсвие побочных эффектов.
Как можно реализовать иммутабельные данные в С++?
В С++ у нас есть (сильно упрощенно):
* значения – объекты фундаментальных типов, экземпляры классов (структур, объединений), перечислений;
* указатели;
ссылки;
массивы.
Функции и **void** не имеет смысл делать иммутабельными. Ссылки тоже не будем делать иммутабельными, для этого есть **const reference\_wrapper**.
[Читать дальше →][1]
[1]:
https://habrahabr.ru/post/322208/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut