Информация об изменениях

Сообщение Re[80]: Когда это наконец станет defined behavior? от 16.08.2023 12:04

Изменено 17.08.2023 22:29 vdimas

Re[80]: Когда это наконец станет defined behavior?
Здравствуйте, ·, Вы писали:

S>>- есть final и records.

·>Верно. И они относятся к более полезной идее — иммутабельность, а не константность.

Дык, мало того, что через константность в С++ легко получить иммутабельность (если требуется именно она), но еще эта иммутабельность может начинаться с некоторой нужной точки в коде.
И это натуральная киллер-фича! ))

Например:
std::map<int, int> buildMap() {
    std::map<int, int> result;

    result.insert(42, 43); // мутабельность
    ...
    return result;
}

const std::map<int, int> = buildMap(); // сохранили в иммутабельный объект


В шарпе для такого сценария есть отдельно иммутабельный аналог map, и отдельно мутабельный builder для него.
В С++ не потребовалось создавать две сущности.

Этот сценарий может возникнуть не только вокруг иммутабельного map, где в шарпе постелили соломку, а вообще везде.

Собсно, только об этом и говорится в обсуждении (многократно по кругу) — что практически любой мутабельный тип можно использовать в т.ч. в иммутабельных сценариях.

Остальные сценарии, когда мутабельный объект подаётся по константной ссылке — это просто удобные гарантии, т.к. после вызова метода с таким аргументом ты можешь в коде рассуждать о том, что целевой объект в результате вызова некоей ф-ии с им-аргументом, не изменился.
Re[80]: Когда это наконец станет defined behavior?
Здравствуйте, ·, Вы писали:

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, где в шарпе постелили соломку, а вообще везде.

Собсно, только об этом и говорится в обсуждении (многократно по кругу) — что практически любой мутабельный тип можно использовать в т.ч. в иммутабельных сценариях.

Остальные сценарии, когда мутабельный объект подаётся по константной ссылке — это просто удобные гарантии, т.к. после вызова метода с таким аргументом ты можешь в коде рассуждать о том, что целевой объект в результате вызова некоей ф-ии с им-аргументом, не изменился.