Я хочу перегрузить обычный оператор назначения копирования.Сначала я использовал интерфейс, который требует только константную ссылку на источник, и явно отключил интерфейс, который принимает изменяемую ссылку, но я не могу пропустить компиляцию.Компилятор сообщает «ошибка: использование удаленной функции« ClassA & ClassA :: operator = (ClassA &) »*
Конечно, я могу скомпилироваться, если не удаляю интерфейс точно, но это не моя цель,Я хотел бы явно удалить его, чтобы избежать неожиданного его использования.
Почему для операции копирования-копирования требуется изменяемая ссылка на источник, а не константная ссылка?Операция присваивания просто нуждается в доступе к источнику только для чтения!
Есть такой же вопрос о конструкторе копирования, я его опускаю для упрощения.
Что не так с моим кодом?или мы НЕ можем его удалить?
Мой пример кода следующий:
class ClassA {
public:
ClassA() = default;
ClassA( ClassA & ) = default;
ClassA & operator=( ClassA & )
= delete // Must comment-out this, or we can't pass the compilation.
// { cout << "ClassA & operator=( ClassA & ) executed." << endl; return *this; }
;
ClassA & operator=( ClassA && ) {
cout << "ClassA & operator=( ClassA && ) executed." << endl;
return *this;
};
ClassA & operator=( const ClassA & ) {
cout << "ClassA & operator=( const ClassA & ) executed." << endl;
return *this;
};
ClassA & operator=( const ClassA && ) {
cout << "ClassA & operator=( const ClassA && ) executed." << endl;
return *this;
};
};
int main() {
ClassA oa, ob;
ob = oa;
return EXIT_SUCCESS;
};