Возможный дубликат:
Передать по ссылке дороже, чем передать по значению
Я хочу знать, что лучше, посылая параметры по значению или по ссылке в C ++. Я слышал, что есть случаи, когда отправка по значению происходит быстрее, чем отправка по ссылке. Какие это случаи?
Спасибо
Как правило, вы должны передавать типы POD по значению, а сложные типы по константной ссылке.
Тем не менее, хорошее место, где вы передаете сложные типы по значению, это то, где вам все равно понадобится копия объекта внутри функции. В этом случае у вас есть два варианта:
передать аргумент как константную ссылку и создать локальную копию внутри функции
передать аргумент по значению (компилятор создает локальную копию).
Второй вариант, как правило, более эффективен. Например, см. копия&идиома своп.
Очевидный случай, когда параметр равен или меньше, чем указатель по размеру и тривиально скопировать — тогда вы бы прошли по значению. Тем не менее, это давняя дискуссия, и для правильного ответа на данную архитектуру требуется довольно длинный ответ. Есть также много угловых случаев (например, RVO).
Вопрос не только в скорости — семантика должна быть вашим первым приоритетом.
Смотрите также: Лучше ли в C ++ передавать по значению или передавать по константной ссылке?