Передать параметр по значению или по ссылке в C ++?

Возможный дубликат:
Передать по ссылке дороже, чем передать по значению

Я хочу знать, что лучше, посылая параметры по значению или по ссылке в C ++. Я слышал, что есть случаи, когда отправка по значению происходит быстрее, чем отправка по ссылке. Какие это случаи?

Спасибо

0

Решение

Как правило, вы должны передавать типы POD по значению, а сложные типы по константной ссылке.

Тем не менее, хорошее место, где вы передаете сложные типы по значению, это то, где вам все равно понадобится копия объекта внутри функции. В этом случае у вас есть два варианта:

  • передать аргумент как константную ссылку и создать локальную копию внутри функции

  • передать аргумент по значению (компилятор создает локальную копию).

Второй вариант, как правило, более эффективен. Например, см. копия&идиома своп.

1

Другие решения

Очевидный случай, когда параметр равен или меньше, чем указатель по размеру и тривиально скопировать — тогда вы бы прошли по значению. Тем не менее, это давняя дискуссия, и для правильного ответа на данную архитектуру требуется довольно длинный ответ. Есть также много угловых случаев (например, RVO).

Вопрос не только в скорости — семантика должна быть вашим первым приоритетом.

Смотрите также: Лучше ли в C ++ передавать по значению или передавать по константной ссылке?

1

По вопросам рекламы [email protected]