Потерянный оператор
else
(dangling else
). Разговорный термин, используемый для описания проблемы, когда во вложенной конструкции операторов if
больше, чем операторов else
. В языке С++ оператор else
всегда принадлежит ближайшему расположенному выше оператору if
. Чтобы указать явно, какому из операторов if
принадлежит конкретный оператор else, применяются фигурные скобки.Пустой оператор
(null statement). Пустой оператор представляет собой отдельный символ точки с запятой.Составной оператор
(compound statement). Синоним блока.Управление потоком
(flow of control). Управление последовательностью выполнения операций в программе.Устойчивость к исключениям
(exception safe). Термин, описывающий программы, которые ведут себя правильно при передаче исключения.Функция
terminate()
. Библиотечная функция, вызываемая в случае, если исключение так и не было обработано. Обычно завершает выполнение программы.Глава 6
Функции
В этой главе описано, как объявлять и определять функции. Здесь также обсуждается передача функции аргументов и возвращение из них полученных значений. В языке С++ функции могут быть перегружены, т.е. то же имя может быть использовано для нескольких разных функций. Мы рассмотрим и то, как перегрузить функции, и то, как компилятор выбирает из нескольких перегруженных функций ее соответствующую версию для конкретного вызова. Завершается глава описанием указателей на функции.
Для запуска кода функции используется
В качестве примера напишем функцию вычисления факториала заданного числа. Факториал числа
n
. Факториал 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
.