162 Часть II. Программирование на C++
Объявление функции должно предшествовать первому ее использованию. Причина того, что функции надо объявлять заключается в том, что в С++ объявления используются компилятором для контроля корректности вызовов функции в программе, т. е. для проверки числа и типа передаваемых ей аргументов.
Передача по значению
Фраза передача по значению (pass by value) означает, что значение одной переменной передается другой переменной. Все операции, совершаемые внутри функции над переменной, в действительности производятся над ее копией. Это означает, что если значение переменной внутри функции изменяется, то на оригинал это не производит никакого действия. Интерфейс аргументов, передаваемых по значению, состоит из типа и имени переменной, без операций *, [] или &.
Это иллюстрирует простая программа: ^
void HeyNordge( int anint) { anint = 5; cout « anint « endl; }
При вызове HeyNordge на консоль выводится значение anint, равное 5, и никакие действия извне на это не могут повлиять:
int otherint = 10; // вне функции HeyNordge cout « otherint « endl; // печатает 10 HeyNordge( otherint); // печатает 5 cout « otherint « endl; // все равно 10
После вызова HeyNordge значение otherint по-прежнему равно 10.
Совет
В соответствии с принятым в этой книге стилем функциям даются имена, в которых каждое слово пишется с заглавной буквы. Каких принципов будете придерживаться вы, давая имена своим функциям, неважно, главное — чтобы эти принципы были. Будьте последовательны. Несколько примеров подобных соглашений можно найти в главе 6 "Базовые типы данных и операции".
Передавать по значению данные встроенных типов не слишком накладно, тем более если нет необходимости модифицировать их значение. К сожалению, не всегда все так просто. Представьте себе процесс передачи по значению переменной составного производного типа, состоящей из массы небольших переменных. Усилия, требуемые для создания копии такого объекта, могут сильно сказаться на производительности. Больше информации по этому вопросу вы получите в главе 17 "Конструкторы: копирование и присваивание".