По сути, здесь есть небольшая языковая проблема.
std::string func() {
return "hai";
}
func().push_back('c'); // Perfectly valid, yet non-sensical
Возвращение константных значений является попыткой предотвратить такое поведение.Однако в действительности это приносит больше вреда, чем пользы, потому что теперь, когда здесь есть ссылки на rvalue, вы просто предотвратите семантику перемещения, которая отстой, и вышеупомянутое поведение, вероятно, будет предотвращено разумным использованием rvalue и lvalue*this
перегрузка.Кроме того, вам все равно придется быть немного идиотом, чтобы сделать это.