В "Эффективном С++" в пункте 3 говорится: "Используйте const, когда это возможно", и он дает пример вроде:
const Rational operator*(const Rational& lhs,
const Rational& rhs);
чтобы клиенты не могли совершать такие зверства, как это:
Rational a, b, c;
...
(a * b) = c; // invoke operator= on the result of a*b!
Но не является ли ссылочное возвращаемое значение функций allready a rvalue? Так зачем же это делать?