Я не могу понять практическую разницу между этими двумя действиями в C++. Являются ли они более или менее эквивалентными для разработчика, хотя могут иметь различия в реализации?
Насколько я понимаю:
Передача по ссылке:
Используется для lvalue.
Избегает копирования.
Позволяет изменять существующий объект в памяти, который вы передаете.< /li>
Передача по rvalue ссылка:
Используется для временных объектов (почему бы просто не присвоить значение постоянному объекту?)
избегает копирования и включает передачу владения (чем отличается «передача владения», если и по-прежнему позволяет обновлять ту же память? В каких случаях это имеет значение?)
Я не могу понять практическую разницу между этими двумя действиями в C++. Являются ли они более или менее эквивалентными для разработчика, хотя могут иметь различия в реализации? Насколько я понимаю: Передача по ссылке: [list] [*]Используется для lvalue. [*]Избегает копирования. [*]Позволяет изменять существующий объект в памяти, который вы передаете.< /li> [/list] Передача по rvalue ссылка: [list] Используется для временных объектов (почему бы просто не присвоить значение постоянному объекту?) [*]избегает копирования и включает передачу владения (чем отличается «передача владения», если и по-прежнему позволяет обновлять ту же память? В каких случаях это имеет значение?) [/list]
std::array::operator[] всегда возвращает ссылку на lvalue ( const если необходимо), но какой может быть смысл в использовании такой строки кода, которая допустима для C++?
std::array{1} = 3;
В конце концов, std::get немного более строгий, потому...