Здравствуйте, ·, Вы писали:
S>>- есть final и records.
·>Верно. И они относятся к более полезной идее — иммутабельность, а не константность.
Дык, мало того, что через константность в С++ легко получить иммутабельность (если требуется именно она), но еще эта иммутабельность может начинаться с некоторой нужной точки в коде.
И это натуральная киллер-фича! ))
Например:
std::map<int, int> buildMap() {
std::map<int, int> result;
result.insert(42, 43); // мутабельность
...
return result;
}
const std::map<int, int> someDictionary = buildMap(); // сохранили в иммутабельный объект
В шарпе для такого сценария есть отдельно иммутабельный аналог map, и отдельно мутабельный builder для него.
В С++ не потребовалось создавать две сущности.
Этот сценарий может возникнуть не только вокруг иммутабельного map, где в шарпе постелили соломку, а вообще везде.
Собсно, только об этом и говорится в обсуждении (многократно по кругу) — что практически любой мутабельный тип можно использовать в т.ч. в иммутабельных сценариях.
Остальные сценарии, когда мутабельный объект подаётся по константной ссылке — это просто удобные гарантии, т.к. после вызова метода с таким аргументом ты можешь в коде рассуждать о том, что целевой объект в результате вызова некоей ф-ии с им-аргументом, не изменился.