
Понимание передачи по значению и передачи по ссылке на Rvalue
При определении параметра функции возможен выбор между передачей по значению и передачей по ссылке на rvalue может существенно повлиять на интерфейс и эффективность функции.
Передача по значению и передача по Rvalue Ссылка
При передаче по значению копия аргумента создается внутри функции. При передаче по ссылке rvalue создается ссылка на исходный аргумент, позволяющая напрямую манипулировать аргументом.
Различие в интерфейсе
Использование ссылочного параметра rvalue передает вызывающему абоненту следующее сообщение:
- Функция требует владения аргументом.
- Функция может изменять аргумент, и вызывающая сторона не должна полагаться на исходное состояние.
С другой стороны, передача по значению указывает, что:
- Функция создает собственную локальную копию аргумента .
- Вызывающий может продолжать использовать исходный аргумент независимо от действий функции.
Эффективность Рекомендации
- Нет исключений: использование передачи по ссылке rvalue устраняет необходимость в вызове конструктора перемещения, что может повысить производительность.
- Оптимизация компилятора: передача по значению может предоставить лучшие возможности для оптимизации компилятора, поскольку позволяет безопасно исключить копирование или перемещение. Однако это утверждение требует конкретных доказательств посредством анализа оптимизации кода.
Дополнительные соображения
- Передача по ссылке rvalue позволяет переместить аргумент, но не требует этого.
- Передача по значению гарантирует, что перемещение произошло, при условии отсутствия исключений.
- Передача мимо value может быть менее эффективным при обработке больших структур данных с указателями на внешние данные. Ссылки Rvalue в таких сценариях обеспечивают повышение производительности, обеспечивая прямой доступ к указанному содержимому.
Руководство по применению
- Используйте передачу по значению, когда вам не требуется владение аргументом и вы хотите сохранить его исходное состояние.
- Используйте ссылку на передачу по rvalue, если вы собираетесь стать владельцем аргумента и может изменить его.
- Учитывайте влияние на производительность при работе с большими структурами данных с указателями на внешние данные, поскольку передача по ссылке rvalue обеспечивает потенциальные преимущества в производительности.