Inicjowanie odwołania
Zmienne typu odwołania musi zostać zainicjowany z obiektu typu, z którego wywodzi się typ odwołania lub z obiektu typu, który można przekonwertować na typ, której pochodną jest typ odwołania.Na przykład:
// 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
}
Jedynym sposobem zainicjować odniesienia z tymczasowy obiekt jest zainicjowanie stałej tymczasowy obiekt.Po zainicjowany, zmienna typu odwołania punkty zawsze tego samego obiektu; nie można zmodyfikować wskaż inny obiekt.
Mimo że składnia może być takie same, inicjowanie zmiennych typu odwołania i przypisanie do zmiennych typu odwołania są semantycznie różnych.W poprzednim przykładzie przydziały zmienić iVar i lVar wyglądać podobnie do inicjowania, ale mają różne efekty.Inicjowanie określa obiekt, który wskazuje zmienna typu odwołania; Przypisanie przypisuje obiekt do określone poprzez odniesienie.
Ponieważ zarówno przekazanie argumentu Typ odwołania do funkcji i zwracanie wartości Typ odwołania z funkcją inicjowania, formalne argumenty funkcji są poprawnie zainicjowany, odwołania, zwracane są.
Zmienne typu odwołanie może być deklarowana bez inicjatory tylko w następujących:
Deklaracje funkcji (prototypy).Na przykład:
int func( int& );
Deklaracje typ zwrotny funkcji.Na przykład:
int& func( int& );
Deklaracja członka klasy typu odwołania.Na przykład:
class c { public: int& i; };
Deklaracja zmiennej jawnie określony jako extern.Na przykład:
extern int& iVal;
Podczas inicjowania zmiennej typu odwołania, kompilator używa wykres decyzji pokazano na poniższym rysunku, aby wybrać między tworząc odwołanie do obiektu lub tymczasowy obiekt, do którego punktów odniesienia.
Wykres decyzji do inicjowania typy odwołań
Odniesienia do volatile typów (zadeklarowana jako volatiletypename**&identyfikatora) mogą być inicjowane z volatile obiektów tego samego typu lub obiekty, które nie zostały zadeklarowane jako volatile. Nie można jednak, można zainicjować z const obiektów tego typu.Podobnie, odniesienia do const typów (zadeklarowana jako consttypename&**identyfikatora) mogą być inicjowane z const obiektów tego samego typu (lub cokolwiek, co ma konwersji dla tego typu lub obiekty, które nie zostały zadeklarowane jako const). Nie można jednak, można zainicjować z volatile obiektów tego typu.
Odwołania, które nie posiadają kwalifikacje z albo const lub volatile słowa kluczowego mogą być inicjowane tylko z obiekty zadeklarowane jako ani const ani volatile.