Кто придумал термин унифицированный (или унифицирующий) оператор присваивания? - PullRequest
7 голосов
/ 23 января 2012

A C ++ wiki book относится к

... В C ++ 0x такой оператор присваивания известен как a , объединяющий оператор присваивания , потому что это избавляет от необходимости писать два различные операторы присваивания ...

для оператора присваивания, который принимает свой тип класса по значению:

String & operator = (String s) // the pass-by-value parameter serves as a temporary
{
   s.swap (*this); // Non-throwing swap
   return *this;
}

Я пытался погуглить этот термин, но, похоже, он не нашел широкого применения.

Откуда это?

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Похоже, что это относится к объединению , которое имеет место в системах формального типа. Смысл в том, что если значения r и l можно привести к одному и тому же типу (объединить) только с помощью определенных законных подстановок, то назначение корректно сформировано.

Википедия утверждает, что этой идее впервые было уделено значительное внимание (и, возможно, ее имя) Джону Алану Робинсону .

1 голос
/ 23 января 2012

Я не уверен, кто это сформулировал, но книга вики не права.Слово «объединяющий» встречается ровно ноль раз в «стандарте» c ++ 0x (в настоящее время вы действительно должны использовать фразу «C ++ 11», это было одобрено в августе 2011 года).

Правильный термин - копия разрешения.Из C ++ 0x (n3242, последнее, что я могу получить, не выплачивая деньги), раздел 12.8 Copying and moving class objects, /34:

При выполнении определенных критериев реализация может опустить конструкцию копирования / перемещенияобъекта класса, даже если конструктор копирования / перемещения и / или деструктор для объекта имеют побочные эффекты.

В таких случаях реализация рассматривает источник и цель пропущенной операции копирования / перемещения просто как дваразличные способы обращения к одному и тому же объекту, и уничтожение этого объекта происходит в более поздние времена, когда два объекта были бы уничтожены без оптимизации.

Это исключение операций копирования / перемещения, называемое копия elision , разрешена при следующих обстоятельствах (которые могут быть объединены для устранения нескольких копий) ...

...