教えてください。

代入演算子のオーバーロードを定義するとき、戻り値をクラスの参照にするべきだと
いうことをよく見るのですが、何故でしょうか?

例)
Hoge というクラスがあったとして
Hoge & Hoge::operator=(const Hoge& x)
{
//定義
}

よく見る解説では a=b=cのような処理を実行するために戻り値は参照でなければ
ならないといけないと書いてあります。

でも、以下のように値を返してもa=b=c は可能だと思えます。
Hoge Hoge::operator=(const Hoge& x)
{
//定義
}

戻り値を値にしてしまった場合、a=b=cが不可能となるようなケースってあるのでしょうか?
よろしくお願いします。