Rvalue и lvalue в C++
В одной из предыдущих статей мы рассматривали move-семантику в C++. Продолжим тему и поговорим про rvalue и lvalue.
Главное отличие rvalue и lvalue заключается в том, что объекты rvalue можно переместить, в то время как объекты lvalue — лишь скопировать. Рассматривать это лучше на практических примерах:
Данный код будет функционировать не так, как от него ждут. К примеру,
Какие из этого можно сделать выводы? Необходимо следить за модификаторами объектов, ведь они учитываются в случае выбора одной из перегрузок функции.
Теперь давайте перейдем ко второму примеру. Он демонстрирует правило, согласно которому результат функции и аргументы могут быть как lvalue, так и rvalue, но параметры функций при этом могут быть лишь lvalue. Под аргументом в данном случае подразумевается то, что передаётся в нашу функцию. Аргумент инициализирует параметр, доступный непосредственно внутри функции.
И хотя параметр string функции