Вообще говоря, ничего они не должны. Однако, для всех классов, по умолчанию, этот оператор означает копирование объекта и возвращение ссылки. Поэтому, при переопределении оператора, отступать от этого правила нежелательно. Но мы не обязаны использовать этот оператор только для копирования объектов.
class A{
public:
int x;
A& operator=(const A& a){x = a.x; return *this;} //переопределили стандартное поведение
void operator=(int xx){x=xx;} //определили поведение при присваивании целого. Но здесь тоже можно вернуть *this.
};
int main(){
A a;
a=1;
A a2;
std::cout << (a2=a).x;
}