Инициализация ссылки
Переменные ссылочного типа должны быть инициализированы с объектом типа, из которого ссылочный тип является производным или с объектом типа, который может быть преобразован в тип является производным от которого является ссылочным типом.Примеры.
// initializing_references.cpp
int iVar;
long lVar;
int main() {
long& LongRef1 = lVar; // No conversion required.
long& LongRef2 = iVar; // C2440
const long& LongRef3 = iVar; // OK
LongRef1 = 23L; // Change lVar through a reference.
LongRef2 = 11L; // Change iVar through a reference.
LongRef3 = 11L; // C3892
}
Единственный способ инициализации ссылки с временным объектом инициализации константы временный объект.После инициализации переменной ссылочного типа всегда указывает на один и тот же объект. его нельзя изменить, чтобы она указывала на другой объект.
Хотя синтаксис может быть таким же, инициализация переменных ссылочного типа и присвоение переменных ссылочного типа семантически различными.В предыдущем примере назначения, которые изменяют iVar и lVar просмотрите похожи на инициализациям, но имеющих различные эффекты.Инициализация указывающее объект, на который указывает переменные ссылочного типа; присвоити назначения в ссылать-к объекту через ссылку.
Поскольку и передачи аргумента ссылочного типа функции и возвращая значение ссылочного типа из функций инициализации, формальных аргументов функции, как правильно инициализированы, возвращаемых ссылок.
Переменные ссылочного типа можно объявлять без инициализаторов только в следующем:
Объявления функции (заполнителей).Примеры.
int func( int& );
Объявления типа Функция-возвращения.Примеры.
int& func( int& );
Объявление члена класса ссылочного типа.Примеры.
class c { public: int& i; };
Объявление переменной явно указанной как extern.Примеры.
extern int& iVal;
При инициализации переменной ссылочного типа, компилятор использует граф решений, приведенные в следующей диаграмме выбрал между создать ссылку на объект или создать временный объект, к которому контрольные точки.
Граф решений для инициализации ссылочных типов
Ссылка на volatile типы (объявленные как volatile TypeName& Идентификаторможет быть инициализировано с) volatile объекты этих же тип, либо с объектами, которые не были объявлены как volatile.Их нельзя, однако инициализации с Const объекты этого типа.Аналогично, ссылки на Const типы (объявленные как Const TypeName& Идентификаторможет быть инициализировано с) Const объекты одного типа (или что-либо, имеющих преобразование к этому типу или с объектами, которые не были объявлены как Const).Их нельзя, однако инициализации с volatile объекты этого типа.
Ссылки, которые не определены с также Const OR volatile ключевое слово могут быть инициализированы только с объектами, объявленные как ни одного Const ни volatile.