25 votes

Une référence a-t-elle un emplacement de stockage?

Une référence a-t-elle un emplacement de stockage ou s'agit-il simplement d'un alias pour un autre emplacement? Cela diffère-t-il selon la révision C ++ ou est-ce cohérent avec toutes les versions de C ++? Et si une référence a un emplacement de stockage, autorise-t-elle simplement la sémantique de valeur sur un pointeur comme type?

Comment fonctionnerait une référence lorsque vous l'utilisiez en tant que telle:

 struct aStruct{
   int aVariable;
   aClass& aReferencetoaClass;
};

Prend-il de la place ou s'agit-il d'un alias?

12voto

Acorn Points 6838

La plupart des compilateurs, pour toute norme C ++ jusqu'à C ++ 17 au moins, implémenteront efficacement une référence en tant que pointeur, à moins d'être optimisée.

En particulier, à l'intérieur d'un struct , il prendra la taille d'un pointeur (plus alignement / remplissage, etc.).

Par conséquent, cela tiendra dans la plupart des environnements:

 struct S {
    char & a;
};

static_assert(sizeof(S) == sizeof(void *));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X