[#] [Из песочницы] Иммутабельные данные в C++
habrabot(difrex,1) — All
2017-02-20 14:30:05


Привет, Хабр! Об иммутабельных данных немало говориться, но о реализации на С++ найти что-то сложно. И, потому, решил данный восполнить пробел в дебютной статье. Тем более, что в языке 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