Параметры программы
Параметры функций по умолчанию
Встраиваемые функции
Функцию можно определить со спецификатором inline. Такие функции называются встраиваемыми. Спецификатор inline указывает компилятору, что открытая подстановка тела функции предпочтительнее обычной реализации вызова функции и что он должен пытаться каждый раз генерировать в месте вызова код, соответствующий встраиваемой функции, а не создавать отдельно код функции (однократно) и затем вызывать её посредством обычного механизма вызова. Спецификатор inline не оказывает влияния на смысл вызова функции.
inline int max(int x, int y) { return x > y ? x : y; } |
Открытая подстановка не влияет на результаты вызова функции, чем отличается от макроподстановки. Встраиваемая функция имеет обычный синтаксис описания функции и подчиняется всем правилам, касающимся области видимости и контроля типов. Открытая подстановка является просто иной реализацией вызова функции. Вместо генерации кода, передающего управление и параметры единственному экземпляру тела функции, копия тела функции, соответственно модифицированная, помещается на место вызова. Это экономит время для передачи управления.
Для всех, кроме простейших, функций время выполнения функций доминирует над издержками времени на обслуживание вызова. Из этого следует, что для всех, кроме простейших, функций экономия за счёт открытой подстановки минимальна. Идеальным кандидатом для открытой подстановки является функция, делающая нечто простое, вроде увеличения или возврата значения. Существование таких функций вызывается необходимостью обработки скрытых данных.
В языке С++ можно задавать так называемые параметры функции по умолчанию. Если в объявлении формального параметра задано выражение, то оно воспринимается как умолчание этого параметра. Все последующие параметры также должны иметь умолчания. Умолчания параметров подставляются в вызов функции при отсутствии в нём последних по списку параметров.
int g(int m = 1, int n); int h(int m = 1, int n = 2); int h(int m = 1, int n = 2) { ... } int h(int m = 0, int n = 0) { ... } int f(int m = 1, int n = 2); f(5, 6); f(5); f(); | // Ошибка // Правильно // Ошибка – повтор параметров по умолчанию // Ошибка – изменение параметров по умолчанию // Правильно // Вызов функции с двумя параметрами // Эквивалентно вызову f(5, 2); // Эквивалентно вызову f(1, 2); |
Функция main, как и любая другая функция может иметь параметры. Эти параметры передаются в программу из командной строки.
void main(int argc, char *argv[]) { ... } | // Имена argc и argv не являются требованием языка |
Первый параметр содержит количество элементов в массиве – втором параметре, который является массивом указателей на строки. Каждая строка хранит один переданный программе параметр, при этом первый параметр (с индексом 0) содержит имя исполняемого файла и существует всегда. Порядок объявления параметров существенен.