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
Libérer: 2024-12-05 14:21:10
original
430 Les gens l'ont consulté

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};
Copier après la connexion

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};
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal