В информатике наличие семантики значений (также семантики типа значения или семантики копирования по значению ) означает, что для объекта имеет значение только его значение, а не его идентичность. [1] [2] Неизменяемые объекты имеют семантику значений тривиально, [3] и при наличии мутации объект с семантикой значений может иметь только уникальную ссылку в любой точке программы.
Концепции, которые используются для объяснения этой концепции, — это экстенсиональность , определенность, замещаемость тождества, развертываемость и референциальная прозрачность . [4]
Важное соображение для семантики значений заключается в том, что имеет значение только значение объекта, а не его идентичность. Поэтому вы можете копировать его (конструктор копирования или присваивание) столько раз, сколько захотите, и любая копия может быть использована вместо оригинала без каких-либо изменений.
Что такое семантика значений? [...] Это специальное сокращение для "семантики типа значения" или "семантики копирования по значению".
представляет неизменяемое значение (в отличие от объекта, представляющего систему с изменяемыми состояниями.) [...] Не обязательно, по крайней мере, в C++. Мне нравится идея, что объект с семантикой значений может быть изменен только операторами присваивания, но это далеко от общего случая --- std::string, например, явно имеет семантику значений, несмотря на большое количество функций-мутаторов. (Можно утверждать, что это ошибка проектирования, но если так, то нам все равно придется с этим жить.)
Важное соображение для семантики значений заключается в том, что значимо только значение объекта, а не его идентичность. Поэтому вы можете копировать его (конструктор копирования или присваивание) столько, сколько захотите, [...] В конечном итоге можно выделить пять различных концепций, которые можно использовать для более точного объяснения этого понятия: экстенсиональность, определенность, подстановочность идентичности, развертываемость и ссылочная прозрачность.