- •1. Встроенные функции. Назначение. Особенности. Преимущества и
- •2. Встроенные функции. Правила оформления и требования к функции.
- •3. Ссылочные переменные. Назначение ссылок.
- •5. Создание ссылочных переменных. Ссылки и указатели : сходсто и
- •6. Ссылки в роли параметров функции. Чем отличается передача
- •7. Как используя функцию с ссылкой в качестве параметра, защитить
- •8. Временные переменные, ссылочные аргументы и модификатор const.
- •9. Использование ссылок при работе со структурами.
- •10. Когда имеет смысл пользоваться ссылочными аргументами.
- •11. В каких случаях функция использует передаваемые ей данные, не
- •12. В каких случаях функция модифицирует данные для вызывающей
- •13. Аргументы, заданные по умолчанию.
- •14. В каком порядке в заголовке функции присваиваются значения,
- •15. Полиморфизм функций (перегрузка функции)
- •16. Приведите пример сигнатур, различие которых не позволяет
- •17. Когда целесообразно использовать перегрузку функции.
- •18.Шаблоны функций. Правила оформления. Пример.
- •19. Перегруженные шаблоны
- •20. Образование шаблонов и специализация.
7. Как используя функцию с ссылкой в качестве параметра, защитить
информацию на которую ссылается ссылка от модификации.
Если вы хотите, чтобы функция использовала информацию, которая ей передается, и не изменяла ее, и если при этом вы желаете пользоваться ссылками, то вам потребуется прибегнуть к помощи постоянной ссылки. Для этого необходимо воспользоваться спецификатором const в прототипе функции и в заголовке функции: double refcube(const double & ra);
При таком использовании спецификатора const, компилятор будет отображать сообщение об ошибке всякий раз, когда обнаружит код, изменяющий значение rа.
8. Временные переменные, ссылочные аргументы и модификатор const.
C++ может создавать временную переменную, если фактический аргумент не соответствует ссылочному. В настоящее время C++ допускает это, только когда аргументом является ссылка const. Прежде всего, в каких случаях временная переменная создается? При условии, что ссылочным параметром является const, компилятор генерирует временную переменную в двух случаях:
Тип фактического аргумента выбран правильно, но сам
параметр не является LValue (L-значение) (Термин "LValue" происходит из выражения присваивания Е1=Е2, в котором левый операнд Е1 должен быть адресным (value) выражением.)
Тип фактического параметра выбран неправильно, но этот тип может быть преобразован в корректный тип.
Аргумент, другими словами, L-значение, представляет собой объект данных, который можно снабжать ссылками.
Если аргумент в обращении к функции не является L-значением или несовместим по типу с соответствующим параметром ссылки const, C++ создает анонимную переменную нужного типа, присваивает значение аргумента обращения к функции анонимной переменной и получает параметр,-ссылающийся на эту переменную.
ИСПОЛЬЗУЙТЕ МОДИФИКАТОР CONST ТАМ, ГДЕ ЭТО ВОЗМОЖНО
Имеются три "железных" довода в пользу объявления ссылочных аргументов в качестве ссылки на константы:
• Применение спецификатора const предотвращает появление программных ошибок, которые могут изменить данные.
• Применение спецификатора const позволяет функции выполнять обработку формальных аргументов как со спецификатором const, так и без него, в то время как функция, в прототипе которой спецификатор const опущен, может принимать только данные, не имеющие статуса const.
• Использование ссылки с модификатором const позволяет функции генерировать и использовать временные переменные по своему усмотрению. Рекомендуется объявлять формальные ссылочные аргументы
со статусом const во всех случаях, когда для этого есть возможность
9. Использование ссылок при работе со структурами.
Ссылки очень хорошо сочетаются со структурами и классами, т.е. с типами данных, которые в C++ объявляет пользователь. Собственно говоря, ссылки были введены, прежде всего для использования именно с этими типами, а не с основными встроенными типами данных. Метод использования ссылок на структуры ничем не отличается от метода использования ссылок на переменные базовых типов, для этого просто достаточно воспользоваться оператором ссылки & при объявлении параметра структуры.