Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Константы и функции

Параметры функции, как и тип возвращаемого ею значения, можно объявить, используя ключевое слово const.

Объявление параметра как константы означает, что функция не может изменить значение этого параметра, что касается лишь деталей реализации функции. Поэтому при вызове на данную особенность можно не обращать внимания.

void FuncA (const int N); // FuncA не может изменить N; ну и что?

Если параметр является указателем или ссылкой, то функция может, как обычно, изменять значение передаваемой переменной,

FuncA {int *PInt); FuncB (int &RInt);

void main ()

{

int N = 1;

FuncA (&N); // FuncA может изменять значение N

FuncB (N); // FuncB может изменять значение N

//...

}

Если же параметр является указателем или ссылкой на тип const, то функция не может изменить значение передаваемой переменной. При вызове функции побочный эффект, вызванный изменением значения переменной, отсутствует. Например:

FuncA (const int *PInt);

FuncB (const int &RInt};

void main ()

{

int N = 1;

FuncA (&N); // FuncA HE МОЖЕТ изменить значение N

FuncB (N); // FuncB HE МОЖЕТ изменить значение N

//...

}

Кроме того, если параметр является указателем или ссылкой на тип данных const, то функции можно передать константную переменную. Если же параметр является указателем или ссылкой на неконстантный тип данных, то передача константы запрещается, так как это приводит к возникновению некорректной ситуации (изменению константы). Например, если N объявлена как

const int N = 1;

можно законно передать адрес N в FuncA или передать N в FuncB, как в приведенном выше примере.

Если параметр объявлен как ссылка на константу, то можно передать функции константное выражение (не допустимо для параметра, который является ссылкой на неконстанту).

void FuncA (const int &RInt);

void main()

{

FuncA (5); // разрешено

//...

}

Если функция возвращает значение базового типа (например, int или double), добавление ключевого слова const к спецификации возвращаемого значения в определении функции не имеет особого значения, потому что изменить такое возвращаемое значение нельзя никаким способом (т. е. это не адресуемое выражение).

Например:

const int Func(); // Возвращается не адресуемое выражение,

// поэтому его никак нельзя изменить

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

const int *FuncA()

{

static int Protected = 1;

++Protected;

return SProtected;

}

const int &FuncB ()

{

static int Safe = 100;

--Safe;

return Safe;

}

void main {int Parm)

{

int N;

N = *FuncA(); //разрешено: N принимает копию Protected

N = FuncB(); //разрешено: N принимает копию переменной Safe

*FuncA() =5; //ОШИБКА: попытка изменения значения типа const

++FuncB (); //ОШИБКА: попытка изменения значения типа const

}

Заметьте, что сами функции FuncA и FuncB изменяют значение внутреннего элемента данных. Так как в их объявлении имеется ключевое слово const, вызывающей функции запрещено производить аналогичные изменения.

<== предыдущая лекция | следующая лекция ==>
Константы и указатели | Перегруженные функции
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 293; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.