|
||||
|
4.6.4 Возврат Значения Из функции, которая не описана как void, можно (и долно) возвращать значение. Возвращаемое значение задается опратором return. Например: int fac(int n) (*return (n»1) ? 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 amp;local; // так не делайте *) Эта ошибка менее обычна, чем эквивалентная ошибка при использовании ссылок: int amp; f() (* int local = 1; // ... return local; // так не делайте *) К счастью, о таких возвращаемых значениях предупреждает компилятор. Вот другой пример: int amp; f() (* return 1;*) // так не делайте |
|
||