Урок 97. Передача аргументов по значению

   ⁄ 

 Обновлено 3 Дек 2017

  ⁄   

По умолчанию аргументы в C++ передаются по значению. Когда аргумент передается по значению, то его значение копируется в параметр функции.

Рассмотрим следующий фрагмент кода:

В первом вызове boo() аргументом является литерал 7. При вызове boo() создается переменная y, а значение 7 копируется в y. Затем, когда boo() завершает своё выполнение, переменная y уничтожается.

Во втором вызове boo() аргументом является уже переменная x. x равно 8. Когда boo() вызывается во второй раз, переменная y создается снова и значение 8 копируется в y. Затем, когда boo() завершает своё выполнение, переменная y снова уничтожается.

В третьем вызове boo() аргументом является выражение x + 2. x + 2 вычисляется в значение 10, которое затем передается переменной y. Переменная y уничтожается снова при завершении выполнения функции boo().

Таким образом, результат программы выше:

y = 7
y = 8
y = 10

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

Результат:

x = 7
y = 7
y = 8
x = 7

В начале функции main() x равно 7. При вызове boo() значение x (7) передается в параметр y функции boo(). Внутри boo() переменной y сначала присваивается значение 8, а затем у уничтожается. Значение x не изменяется, даже если изменить y.

Параметры функции, переданные по значению, также могут быть const. Тогда уже будет 100% гарантия того, что функция не изменит значение параметра.

Плюсы и минусы передачи по значению

Плюсы передачи по значению:

 Аргументы, переданные по значению, могут быть переменными (например, x), литералами (например, 8), выражениями (например, x + 2), структурами, классами или перечислителями. Т.е. почти всем.

 Аргументы никогда не изменяются функцией, в которую передаются, что предотвращает возникновение побочных эффектов.

Минусы передачи по значению:

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

Когда использовать передачу по значению:

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

Когда не использовать передачу по значению:

  при передаче массивов, структур и классов.

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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (5 оценок, среднее: 4,60 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *