Потерянный операторelse
(dangling else
). Разговорный термин, используемый для описания проблемы, когда во вложенной конструкции операторов if
больше, чем операторов else
. В языке С++ оператор else
всегда принадлежит ближайшему расположенному выше оператору if
. Чтобы указать явно, какому из операторов if
принадлежит конкретный оператор else, применяются фигурные скобки.
Пустой оператор (null statement). Пустой оператор представляет собой отдельный символ точки с запятой.
Составной оператор (compound statement). Синоним блока.
Управление потоком (flow of control). Управление последовательностью выполнения операций в программе.
Устойчивость к исключениям (exception safe). Термин, описывающий программы, которые ведут себя правильно при передаче исключения.
Функцияterminate()
. Библиотечная функция, вызываемая в случае, если исключение так и не было обработано. Обычно завершает выполнение программы.
Глава 6
Функции
В этой главе описано, как объявлять и определять функции. Здесь также обсуждается передача функции аргументов и возвращение из них полученных значений. В языке С++ функции могут быть перегружены, т.е. то же имя может быть использовано для нескольких разных функций. Мы рассмотрим и то, как перегрузить функции, и то, как компилятор выбирает из нескольких перегруженных функций ее соответствующую версию для конкретного вызова. Завершается глава описанием указателей на функции.
Для запуска кода функции используется
В качестве примера напишем функцию вычисления факториала заданного числа. Факториал числа
является произведением чисел от 1 до
. Факториал 5, например, равен 120:
1 * 2 * 3 * 4 * 5 = 120
Эту функцию можно определить следующим образом:
//
//
int fact(int val) {
int ret = 1; //
//
while (val > 1)
ret *= val--; //
//
return ret; //
}
Функции присвоено имя fact
. Она получает один параметр типа int
и возвращает значение типа int
. В цикле while
вычисляется факториал с использованием постфиксного оператора декремента (см. раздел 4.5), уменьшающего значение переменной val
на 1 при каждой итерации. Оператор return
выполняется в конце функции fact
и возвращает значение переменной ret
.
Чтобы вызвать функцию fact()
, следует предоставить ей значение типа int
. Результатом вызова также будет значение типа int
:
int main() {
int j = fact(5); //
cout << "5! is " << j << endl;
return 0;
}
Вызов функции осуществляет два действия: он инициализирует параметры функции соответствующими аргументами и передает управление коду этой функции. При этом выполнение
Выполнение функции начинается с неявного определения и инициализации ее параметров. Таким образом, когда происходит вызов функции fact()
, сначала создается переменная типа int
по имени val. Эта
переменная инициализируется аргументом, предоставленным при вызове функции fact()
, которым в данном случае является 5
.