Что такое value semantics?

Рейтинг: 2Ответов: 1Опубликовано: 02.06.2023

Limitation

The erase–remove idiom cannot be used for containers that return const_iterator (e.g.: set)[6]

std::remove and/or std::remove_if do not maintain elements that are removed (unlike std::partition, std::stable_partition). Thus, erase–remove can only be used with containers holding elements with full value semantics without incurring resource leaks.

Это параграф из статьи. Скажите, что означает full value semantics в контексте этой статьи? Я слышал только о move semantics.

Ответы

▲ 4Принят

В таком контексте я это слово раньше не слышал. (Чаще попадается в таком.)

Википедия сама же и объясняет, что она имеет в виду: https://en.wikipedia.org/wiki/Value_semantics

In computer science, having value semantics ... means for an object that only its value counts, not its identity.

То есть класс (тип) написан и используется так, что неважно, где он копируется и сколько раз (в смысле неважно с точки зрения корректности, может быть важно с точки зрения производительности).

Чтобы оно так работало, класс должен соответствовать правилу 3/5/0. (Я бы так и сформулировал, и не приплетал бы value semantics.)