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

По значению функция получает отдельный параметр, по ссылке — доступ к исходному объекту. Указатель также копируется как значение, но через него можно обращаться к чужому объекту.

Короткий ответ

Что ответить на собеседовании

По значению функция получает отдельный параметр, по ссылке — доступ к исходному объекту. Указатель также копируется как значение, но через него можно обращаться к чужому объекту.

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

По значению функция получает отдельный параметр, по ссылке — доступ к исходному объекту. Указатель также копируется как значение, но через него можно обращаться к чужому объекту.

void byValue(int x) { ++x; }
void byReference(int& x) { ++x; }
void byPointer(int* x) { if (x) ++*x; }
int readOnly(const int& x) { return x; }

Для исходного int n = 1 первый вызов не меняет n, второй и третий могут изменить его. const-ссылка запрещает изменение через этот параметр. Передача объекта по значению может использовать копирование, перемещение или устранение копии; поэтому не всякий такой вызов означает дорогую копию. Сам параметр T&& тоже не выполняет перемещение автоматически.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее