Введение в язык Си++

         

Возврат Значения


Из функции, которая не описана как void, можно (и должно) возвращать значение. Возвращаемое значение задается оператором return. Например:

int fac(int n) {return (n1) ? n*fac(n-1) : 1; }

В функции может быть больше одного оператора return:

int fac(int n) { if (n 1) return n*fac(n-1); else return 1; }

Как и семантика передачи параметров, семантика возврата функцией значения идентична семантике инициализации. Возвращаемое значение рассматривается как инициализатор переменной возвращаемого типа. Тип возвращаемого выражения проверяется на согласованность с возвращаемым типом и выполняются все стандартные и определенные пользователем преобразования типов. Например:

double f() { // ... return 1; // неявно преобразуется к double(1) }

Каждый раз, когда вызывается функция, создается новая копия ее параметров и автоматических переменных. После возврата из функции память используется заново, поэтому возвращать указатель на локальную переменную неразумно. Содержание указываемого места изменится непредсказуемо:

int* f() { int local = 1; // ... return local // так не делайте }

Эта ошибка менее обычна, чем эквивалентная ошибка при использовании ссылок:

int f() { int local = 1; // ... return local; // так не делайте }

К счастью, о таких возвращаемых значениях предупреждает компилятор. Вот другой пример:

int f() { return 1;} // так не делайте



Содержание раздела