Поделиться через


Инициализация ссылки

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

// 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.

См. также

Ссылки

Инициализаторы