Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Объявление и инициализация ссылок

Читайте также:
  1. http://bither.livejournal.com/325211.html ликбез: майдан, Украина, ссылки (копии ссылок), бандеровцы и прочее. Жестко и нелицеприятно
  2. Ii) Инициализация указателей
  3. Unit 6. Bidding - заявление, объявление
  4. Блок 2 Использование абсолютных и относительных ссылок
  5. Вставка примечаний, создание гиперссылок, добавление управляющих кнопок.
  6. Выпускная квалификационная работа без ссылок на источники заимствованного материала к защите не допускается.
  7. Для просмотра гиперссылок Web - узла следует

В конце прошлой лекции мы обсуждали понятие ссылки в контексте применения ссылок в функциях. Напомним и продолжим эту тему.

Agrave; Справка: “Тип” ссылка

Ссылочная переменная, или просто ссылка, есть альтернативное имя, псевдоним (синоним, алиас – alias) другой, уже существующей, переменной, т.е., определяя переменную типа ссылка, мы определяем для некоторой переменной другое имя. Ссылки должны быть инициализированы при объявлении. Инициализатор является именующим выражением (l-value), которое дает адрес переменной. Когда объявляется переменная i, она получает связанный с ней адрес памяти. Когда объявляется переменная-ссылка j и инициализируется переменной i, она идентична i, в том смысле, что ничем не отличается от остальных имен этого объекта. Инициализация ссылки не есть присвоение ей значения – несмотря на форму записи, ни один оператор не выполняет действий над ссылкой.

 

int i;

int& j = i; // j и i два имени для одной и той же переменной

j = 2; // i принимает значение 2

 

Ссылки часто используются как параметры функций или для возвращения значений из функций.

Ссылка может иметь константный тип. Инициализатор для const T& не обязан быть lvalue и даже иметь тип T. Константная ссылка может ссылаться на неконстантную переменную. В этом случае, переменная имеет два имени: одно есть константное имя, другое – неконстантное. Эта переменная не может быть модифицирована через константное имя:

 

int i = 3;

const int & n = i;

i = 5; // OK

//n = 7; не разрешено

ß

Использование Ссылок

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

Итак, ссылка – это вымышленное (alias – псевдоним) имя для другой переменной. Это имя может использоваться вместо имени оригинальной переменной. Так как это псевдоним, а не указатель, то переменная, для которой вводится псевдоним (т.е., ссылка) должна быть специфицирована при объявлении ссылки, и, в отличие от указателя, ссылку нельзя изменить так, чтобы она представляла другую (“чужую”) переменную.

Объявление и инициализация ссылок

Если мы имеем объявленную переменную,

long number = 0;

мы можем объявить ссылку на эту переменную, используя следующий оператор объявления:

long& rnumber = number; // Объявление ссылки на переменную number

Амперсанд вслед за типом long и последующее имя rnumber, указывают, что объявлена ссылка и переменная, которую она представляет, есть number, которая специфицирована в качестве инициализирующего значения после знака равенства. Поэтому, rnumber имеет тип 'ссылка на long'. Теперь ссылка может использоваться вместо имени исходной переменной. Например, такой оператор,

rnumber += 10;

действует как увеличение значения переменной number на 10.

Для сравнения рассмотрим указатель pnumber, объявленный в операторе:

long* pnumber = &number; // Initialize a pointer with an address

Здесь объявлен указатель pnumber, и он инициализирован адресом переменной number. Это позволяет применить указатель при инкрементировании в таком виде:

*pnumber += 10; // Увеличение number с использованием указателя

Мы видим важную разницу между использованием указателей и ссылок. Указатель нуждается в операции разыменования, чтобы по содержащемуся в указателе адресу можно было “добраться” до значения переменной. При наличии ссылки же у нас нет необходимости в разадресации. В некотором смысле, ссылка похожа на указатель, который уже (всегда) разыменован, хотя он не может быть изменен для ссылки на не свою переменную. Ссылка – это полный эквивалент другой переменной, для которой она введена, и может рассматриваться как альтернативная нотация заданной переменной и ведет себя соответственно. Но мы увидим, при обсуждении использования ссылок в функциях, что это не вся правда о ссылках.


Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Проверка – Передача по значению| Как это работает

mybiblioteka.su - 2015-2024 год. (0.008 сек.)