Вам не нужно const:
@ numeric25: просто любопытно, почему параметр должен быть константой при перегрузке операции
Это не обязательно, но это хорошее дизайнерское решение.
См. Стандарт C ++, раздел 12.8-9:
Пользовательское назначение копирования
оператор X :: operator = является нестатическим
не шаблонная функция-член класса
X с ровно одним параметром типа
X, X &, const X &, летучий X & или const
изменчивый X &
Я думаю, что это хорошая идея:
Использование параметра const кажется мне логичным решением при проектировании, поскольку вы хотите убедиться, что другое значение не будет изменено.
Он говорит другим людям, которые используют ваш класс, что вы не будете изменять значение other
, когда говорите что-то вроде: myObject = other;
, и это принудительно применяется, чтобы вы не могли случайно изменить other
.
Также, если вы разрешили неконстантные ссылки на объект в качестве параметра, тогда вы ограничите количество объектов, которые могут использовать вашу функцию. Если это const, его можно использовать для параметров, которые являются постоянными и не постоянными. Если ваш параметр не является константным, он может использоваться только параметрами, которые не являются константными.
const применяется только к текущей ссылке, а не к объекту:
@ numeric25: разве когда что-то становится константой, оно остается неизменным до конца жизни приложения? Чем это отличается при перегрузке работы ???
Ссылка const - это просто ссылка const. Это не меняет постоянство фактического объекта, в котором вы передаете.
Пример неконстантной перегрузки оператора:
Вот пример перегрузки операторов, когда параметр не является константой.
Я НЕ РЕКОМЕНДУЮ ДЕЛАТЬ ЭТОТ МЫСЛЬ:
class B
{
public:
const B& operator=(B& other)
{
other.x = 3;
x = other.x;
return *this;
}
int x;
};
void main(int argc, char** argv[])
{
B a;
a.x = 33;
B b;
b.x = 44;
a = b;//both a and b will be changed
return 0;
}