изменение значения объекта через rvalue - PullRequest
2 голосов
/ 11 июля 2019

Из последних стандартов C ++ ISO https://timsong -cpp.github.io / cppwp / expr # basic.lval-10

Значение lvalue можно изменить, если его тип неconst-qualified или является типом функции.[Примечание: программа, которая пытается изменить объект через немодифицируемое значение lvalue или через значение rvalue, неправильно сформирована

Но следующий код, который временно изменяет значение через rvalue, работает хорошо.

https://godbolt.org/z/L9H06i

#include <iostream>
struct A
{
std::string s1;
 A():s1("123") {}
 A&& modify() { s1 = "123411111111111111111111111111111111111111111111111111111111111111111111"; 
  return std::move(*this);                                                  
   } //modifying temporary object through rvalue!
};

void f(A&& o)
{
   std::cout << o.s1.c_str();
}

int main()
{
   f(A().modify());//modifying temporary object through rvalue!
    return 0;
}
...