Урок №103. Передача по значенню

  Юрій  | 

  Оновл. 18 Січ 2021  | 

 84

За замовчуванням, аргументи в C++ передаються по значенню. Коли аргумент передається по значенню, то його значення копіюється в параметр функції. Наприклад:

У першому виклику функції boo() аргументом є літерал 7. При виклику boo() створюється змінна y, в яку копіюється значення 7. Потім, коли boo() завершує своє виконання, змінна y знищується.

У другому виклику функції boo() аргументом вже є змінна x = 8. Коли boo() викликається вдруге, змінна y створюється знову і значення 8 копіюється в y. Потім, коли boo() завершує своє виконання, змінна y знову знищується.

У третьому виклику функції boo() аргументом є вираз x + 2, який обчислюється в значення 10. Потім це значення передається в змінну y. При завершенні виконання функції boo() змінна y знову знищується.

Таким чином, результат виконання програми:

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 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *