аргументи функції
посилальні аргументи
Для зберігання аргументів і локальних змінних зазвичай використовується спеціальна область пам'яті - стек. Так як операції з нею досить повільні, великі дані краще передавати через посилання або покажчики, а для локальних змінних використовувати динамічну пам'ять.
функція як аргумент
Так як ім'я функції саме по собі є покажчиком. то можна визначати і функції, які приймають в якості аргументу інші функції.
аргументи з атрибутом const
Потрібно пам'ятати, що передаючи аргументи за посиланням або вказівником, ми даємо можливість змінити об'єкти всередині функції. В одних випадках це потрібно, в інших немає. Для запобігання зміни аргументу використовується атрибут const.
значення за замовчуванням
C ++ дозволяє задати аргументів функції значення за замовчуванням. Такі аргументи повинні бути в кінці списку. Як значення може бути будь-яка коректне для ініціалізації вираз цього ж типу.
перевантаження функцій
Функцій можна ставити одне і теж ім'я, якщо вони мають різне число аргументів або різні типи аргументів. Це називається перевантаженням функцій. Іноді спільне використання перевантаження і значень аргументів за замовчуванням може привести до конфлікту імен.
Реалізується перевантаження генерацією нового імені функції на основі числа і типів аргументів. У кожного компілятора власний алгоритм генерації імен. Тому при розробки бібліотек для їх переносимості використовують тільки C функції. А по стандарту мови С, до імен функції додається тільки символ підкреслення. Нижче наведено імена функцій, які згенерував компілятор MinGw. Подивитися імена можна в об'єктних файлах (* .obj або * .o)
змінне число аргументів
В С ++ дозволені функції зі змінним числом аргументів. Наприклад, бібліотечна функція консольного виведення printf. Для вказівки змінного числа аргументів служить три крапки. При цьому повинен бути хоча б один іменований аргумент, звичайно визначає число різних неназваних аргументів.
По-друге, для більшості компіляторів спосіб передачі аргументів не можна змінювати (тобто невикористаний атрибути функції подібні __fastcall). Для доступу до неіменованого аргументів служать макроси певні в stdarg.h.