Maison >développement back-end >C++ >Pourquoi les tableaux de références sont-ils interdits en C ?

Pourquoi les tableaux de références sont-ils interdits en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 14:21:10423parcourir

Why Are Arrays of References Prohibited in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn