ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
Константные аргументы функции
Мы видели, что ссылочный механизм передачи аргументов в функцию позволя- ет функции изменять значения аргументов. Но существуют и другие причины для использования ссылок на аргументы функции, и одной из таких причин явля-
ется эффективность. Некоторые переменные, используемые в качестве аргумен- тов функции, могут иметь большой размер; примером являются структурные переменные с большим числом полей. В случае, если аргумент занимает много места в памяти, его передача по ссылке является гораздо более эффективной, поскольку в последнем случае в функцию передается не значение переменной, а только ее адрес.
Предположим, что вы используете ссылочный механизм только из соображе- ний эффективности и при этом не хотите, чтобы функция имела свободный доступ к аргументу и изменяла его значение. Для того чтобы получить подоб- ную гарантию, вы можете указать модификатор const перед соответствующим аргументом в прототипе функции. Пример CONSTARG демонстрирует применение этого метода.
// constarg.cpp
// демонстрирует константные аргументы функций
void aFunc( int& a, const int& b); // прототип функции
int main() {
int alpha = 7; int beta = 11; aFunc(alpha, beta); //вызов функции return 0;
}
//--------------------------------------------------------
void aFunc(int& a, const int& b) // определение функции {
a = 107; // корректно
b = 111; // ошибка при попытке
// изменить константный аргумент
}
В данной программе мы хотим быть уверенными в том, что функция aFunc() не сможет изменить значения переменной beta (в то же время нам не нужно по- добной уверенности относительно переменной alpha). Мы используем модифи- катор const с переменной beta в прототипе функции и ее определении:
void aFunc(int& alpha, const int& beta);
Теперь любая попытка изменить содержимое переменной beta функцией aFunc() повлечет за собой сообщение об ошибке от компилятора. Одним из по- ложений идеологии разработчиков C++ является такое: лучше обнаруживать ошибки в программе на этапе ее компиляции, чем во время ее выполнения. Использование модификатора const демонстрирует этот принцип в действии.
Если вы желаете передать в функцию константную переменную с помощью ссылки, у вас не остается другого выбора, как использовать модификатор const в прототипе функции (с передачей константного аргумента по значению не возникает подобной проблемы; определение константной переменной гаран- тирует, что ни функция, ни любые операторы программы не способны изменить ее значения).
Многие библиотечные функции используют константные аргументы подоб- ным образом, как мы увидим в следующих наших примерах.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Схожі підручники
- РЕГІОНАЛЬНА ЕКОНОМІКА (частина 1)
- Бухгалтерський фінансовий облік (частина 3)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
- ДИЛЕММА ИННОВАТОРА (частина 1) (онлайн)
- Самостiйна робота з курсу - Системи промислових технологій в галузях економіки
- Загальні питання з курсу «Теорія ймовірності та Математичної статистики»№1
