C++ Primer 5th:
(Код также из книги, контекст 99%, указанный здесь)
#include <string>
using namespace std;
int main()
{
//no error
string s1 = "123", s2 = "aaaa";
s1 + s2 = "wow";
auto a = (s1 + s2).find("a");
}
До нового стандарта (здесь он говорил C++ 11), не было никакого способа предотвратить такое использование. Чтобы поддерживать обратную совместимость, классы библиотек продолжают разрешать присвоение значениям rvalues. Однако мы могли бы предотвратить такое использование в наших собственных классах. В этом случае wed подобно тому, как заставить левый операнд (т.е. Объект, которому
this
указывает), быть lvalue.
Какая обратная совместимость требует назначения для rvalues?
Кстати, мне также интересно, почему s1 + s2 = "wow"
разрешен, но int я = 3, j = 4; я + j = 7;
int я = 3, j = 4; я + j = 7;
не допускается. (Поскольку это тесно связано, я предпочитаю не открывать другой вопрос)