Ответ 1
Это часть функции, позволяющая нестационарным функциям С++ 11 различать, вызывается ли они на lvalues или rvalues.
В приведенном выше случае оператор присваивания копии, по умолчанию здесь, может быть вызван только на lvalues. Это использует правила для привязки ссылок lvalue и rvalue, которые хорошо установлены; это просто устанавливает их для this
.
В приведенном выше случае оператор присваивания копий по умолчанию используется только в том случае, если копируемый объект может связываться с ссылкой на константу lvalue. Так что это нормально:
C c{};
c = C{};
Это не:
C{} = c;
Временное здесь не может связываться с ссылкой lvalue, и поэтому оператор присваивания копий не может быть вызван. И поскольку это объявление предотвратит создание обычного оператора присваивания копий, этот синтаксис эффективно предотвращает присвоение копии (или перемещение-присваивание) во временные. Чтобы восстановить это, вам нужно добавить версию &&
:
C& operator=(const C&) && = default;
C& operator=(C&&) && = default;