Sdílet prostřednictvím


Inicializace odkazy

Objekt typu z typu odkazu je odvozen nebo objekt typu, který lze převést na typ, ze kterého je odvozen typ odkazu musí být inicializována proměnné typu odkaz.Příklad:

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

Jediným způsobem, jak inicializovat odkaz s dočasný objekt je konstantní dočasný objekt inicializace.Po inicializaci proměnné typu odkazu vždy odkazuje na stejný objekt; nelze změnit pro jiný objekt.

Ačkoli syntaxe mohou být stejné, inicializace proměnných typu odkazu a přiřazení jsou sémanticky jiné proměnné typu odkazu.V předchozím příkladu přiřazení změnit iVar a lVar inicializace podobný, ale mají různé efekty.Inicializace určuje objekt, na který odkazuje proměnná typu odkazu; přiřazení přiřadí objekt odkazuje prostřednictvím odkazu.

Protože inicializace jsou funkce předávání argument typu odkaz i z funkce vrací hodnotu typu odkaz, formální argumenty funkce inicializovány správně, jako jsou odkazy vrácena.

Bez Inicializátory pouze v následujících lze deklarovat proměnné typu odkazu:

  • Deklarace funkce (prototypy).Příklad:

    int func( int& );
    
  • Deklarace typu návrat funkce.Příklad:

    int& func( int& );
    
  • Prohlášení člen třídy typu odkazu.Příklad:

    class c {
    public:
       int& i;
    };
    
  • Proměnná explicitně zadán jako extern.Příklad:

    extern int& iVal;
    

Při inicializaci proměnné typu odkazu kompilátor používá rozhodnutí graf znázorňuje následující obrázek vyberte mezi vytvořením odkazu na objekt nebo dočasný objekt, na který odkaz odkazuje.

Rozhodnutí grafu pro inicializaci typy odkazů

Rozhodnutí grafu odkazové typy

Odkazy na volatile typy (deklarován jako volatiletypenameaidentifikátor) mohou být inicializován s volatile objektů stejného typu nebo objekty, které není deklarován jako volatile.  Mohou však nelze, být inicializován s const objekty tohoto typu.Podobně, odkazy na const typy (deklarován jako consttypenameaidentifikátor) může být inicializován s const objektů stejného typu (nebo vše, co má převod typu nebo objekty, které není deklarován jako const).  Mohou však nelze, být inicializován s volatile objekty tohoto typu.

Odkazy, které nejsou kvalifikované buď const nebo volatile klíčové slovo lze inicializovat pouze s objekty deklarované jako ani const ani volatile.

Viz také

Referenční dokumentace

Inicializátory