Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Передача параметров: значение, ссылка и указатель

Страница 17 из 43 · 2026-10-25 · 1 мин чтения

Передача параметров: значение, ссылка и указатель

Передача по значению

При передаче по значению функция получает отдельный объект. Изменение параметра не изменяет исходную переменную:

void SetZero(int value) {    value = 0;}int number = 10;SetZero(number);// number всё ещё равен 10

Для небольших типов вроде int, double и bool это обычно хороший выбор.

Передача по ссылке

Ссылка позволяет функции работать с исходным объектом:

void SetZero(int& value) {    value = 0;}

Для чтения крупного объекта без копирования используй const T&:

void Print(const std::string& text) {    std::cout << text << '\n';}

Указатель как параметр

Указатель подходит, когда отсутствие объекта имеет смысл (nullptr) или нужно явно передать адрес:

void Reset(int* value) {    if (value != nullptr) {        *value = 0;    }}

Если отсутствие объекта не допускается, ссылка часто выражает контракт лучше, чем указатель.

Возврат результата

Не обязательно менять аргумент через ссылку: нередко яснее вернуть новый результат.

int Square(int value) {    return value * value;}

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

Значения по умолчанию

void Log(const std::string& message, int level = 1);

Аргументы по умолчанию обычно указывают в объявлении, доступном вызывающему коду. После параметра со значением по умолчанию все последующие параметры также должны иметь значения по умолчанию.

Итог

Передавай небольшие значения по значению, большие объекты только для чтения — через const-ссылку, а изменяемые данные — через ссылку, если это часть понятного контракта функции.