Tableaux de références et norme C
En C , une tentative de déclarer un tableau de références, comme dans l'extrait de code suivant, entraînera une erreur de compilation :
int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8};
Ceci est explicitement interdit par le standard C, qui stipule dans §8.3.2/4 que « Il ne doit y avoir aucune référence à des références, aucun tableau de références et aucun pointeur vers des références. »
Pourquoi les tableaux de références sont-ils illégaux ?
La raison de cette interdiction réside dans la nature des références. Contrairement aux objets, qui occupent de la mémoire et possèdent une adresse, les références sont des alias pour d'autres objets. Ils n'ont pas d'existence indépendante et n'occupent pas eux-mêmes la mémoire.
Un tableau de références serait donc un tableau de pointeurs vers des objets, ce qui pourrait conduire à de la confusion et à d'éventuels problèmes de gestion de la mémoire. Par exemple, si l'objet pointé par une référence devait être supprimé, la référence deviendrait pendante et le tableau pourrait contenir des données non valides.
Simulation de tableaux de références
Bien que la création de véritables tableaux de références ne soit pas autorisée en C , il existe des moyens de simuler leur comportement en utilisant d'autres techniques. Une approche courante consiste à utiliser une classe qui contient une variable membre de référence, comme indiqué dans le code suivant :
struct cintref { cintref(const int &ref) : ref(ref) {} operator const int &() { return ref; } private: const int &ref; void operator=(const cintref &); }; int main() { int a=1,b=2,c=3; cintref arr[] = {a,b,c,8}; }
Cela nous permet de créer un tableau d'objets contenant chacun une référence à une variable entière. Cependant, il est important de noter qu'il ne s'agit pas d'un véritable tableau de références mais plutôt d'un tableau d'objets qui stockent des références.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!