Вот хорошая статья: Хотите скорость? Передать по значению.
Также вам действительно нужно быть осторожным с возвратом по ссылке. Ссылки похожи на указатели в том, что вы можете получить висячие ссылки, которые юридически непригодны для использования. Следующее имеет неопределенное поведение:
int const &foo() {
return 1;
}
Кроме того, при передаче примитивных типов, таких как float
, обычно лучше просто скопировать их, поскольку передача указателя означает, что вместо этого вы будете копировать указатель, что вряд ли будет быстрее копирования самого значения. Этот ответ имеет хорошее эмпирическое правило для определения параметров по отношению к значению: https://stackoverflow.com/a/1567186/365496
Еще одна причина для передачи по const &
вместо значения заключается в том, что для создания копии может потребоваться выделение памяти в куче. Такие копии могут потерпеть неудачу, и поэтому лучше передавать по ссылке, чтобы избежать этой ошибки.