Partager via


Initialiser des références

Les variables de type référence doivent être initialisées avec un objet du type à partir duquel le type référence est dérivé de, ou à un objet d'un type qui peut être converti en type à partir duquel le type référence est dérivé.Par exemple :

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

La seule façon d'initialiser une référence à un objet temporaire est d'initialiser un objet temporaire constante.Une fois qu'initialisé, points d'une variable de type référence toujours le même objet ; il ne peut pas être modifié pour indiquer un autre objet.

Bien que la syntaxe peut être identique, l'initialisation des variables de type référence et l'assignation aux variables de type référence sont sémantiquement différents.Dans l'exemple précédent, les assignations qui modifient iVar et le sembler d' lVar comme les initialisations, mais offre différents effets.l'initialisation spécifie l'objet auquel les points variables de type référence ; l'assignation assigne à l'objet référencé via la référence.

Étant donné que passer un argument de type référence à une fonction et retourner une valeur de type référence d'une fonction sont des initialisations, les arguments formels à une fonction sont correctement initialisés, de même que les références retournées.

Des variables de type référence peuvent être déclarées sans initialiseurs uniquement dans l'exemple suivant :

  • déclarations de fonction (prototypes).Par exemple :

    int func( int& );
    
  • déclarations de type de Fonction-retour.Par exemple :

    int& func( int& );
    
  • déclaration d'un membre de classe de type référence.Par exemple :

    class c {
    public:
       int& i;
    };
    
  • Déclaration d'une variable spécifiée explicitement comme extern.Par exemple :

    extern int& iVal;
    

En initialisant une variable de type référence, le compilateur utilise le graphique de décision représenté dans l'illustration suivante pour choisir de créer une référence à un objet ou créer un objet temporaire auquel les points de référence.

Décision Graphique pour l'initialisation des types référence

Types référence d'initialisation des graphiques de décision

Des références aux types d' volatile (déclarés en tant qu'identificateur typename*&** d' volatile) peuvent être initialisées avec des objets d' volatile du même type ou avec des objets qui n'ont pas été déclarés comme volatile.Elles ne peuvent pas, toutefois, être initialisées avec des objets de const de ce type.De même, des références aux types de const (déclarés en tant qu'identificateur typename&** *de const) peuvent être initialisées avec des objets de const du même type (ou tout ce qui ont une conversion vers ce type ou avec des objets qui n'ont pas été déclarés comme const).Ils ne peuvent pas, toutefois, être initialisés avec les objets d' volatile de ce type.

Les références qui ne sont pas qualifiées avec const le mot clé ou d' volatile ne peuvent être initialisées uniquement avec les objets déclarés comme ni const ni volatile.

Voir aussi

Référence

Initialiseurs