Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Почему примитивы нужно передавать по значению?

Почему примитивные типы данных нужно передавать по значению, а не по константной ссылке?


Ответ

Для начала подумайте, зачем передавать большие объекты по ссылке, а не по значению? Ответ на это такой: чтобы избежать копирования. При передаче по ссылке вместо самого объекта передаётся ссылка на него (то есть, под капотом, указатель), так что расходов на копирование объекта нет.
У нас при этом, правда, получается расход на косвенный вызов (по указателю), но им можно обычно пренебречь.
Теперь, что получается, если мы передаём по ссылке примитивные типы? Их размер сравним с размером самой ссылки, а то и меньше. Таким образом, выгоды от передачи по ссылке нет, копирование что самого примитивного типа, что ссылки — примерно одинаковая операция. А вот затраты на разыменование ссылки остаются.
Поэтому имеет смысл по возможности избегать передачи примитивных типов по ссылке.

С другой стороны, компиляторы становятся всё умнее, и заинлайнив функцию, вполне могут перейти от ссылки к самому объекту, тем самым «уравняв» оба подхода. Смысл-то реально один: передача объекта в функцию.

Комментариев нет:

Отправить комментарий