Maison > développement back-end > C++ > Pourquoi ne puis-je pas utiliser des références comme éléments dans un vecteur standard ?

Pourquoi ne puis-je pas utiliser des références comme éléments dans un vecteur standard ?

DDD
Libérer: 2024-12-26 16:13:13
original
968 Les gens l'ont consulté

Why Can't I Use References as Elements in a Standard Vector?

Pourquoi mon vecteur n'accepte-t-il pas les références ?

Problème : Vector fonctionne, mais Vector provoque des erreurs du compilateur.

Explication :

Les vecteurs et autres conteneurs nécessitent que leurs types de composants soient attribuables. Une référence est un type non attribuable car elle contient une référence constante à un emplacement mémoire spécifique. Une fois qu'une référence est initialisée, elle ne peut pas pointer vers un objet différent.

Approches possibles :

  • Utilisez plutôt des pointeurs : Ceci est l'option recommandée si vous devez conserver plusieurs références à différents objets. Les pointeurs peuvent être attribués et réaffectés à différents emplacements de mémoire.
std::vector<int*> hello;
Copier après la connexion
  • Créer un vecteur de références à des objets d'un type fixe : Cette approche est acceptable si tous les références font référence à des objets du même type qui ne seront ni affectés ni modifiés après insertion dans le vecteur.
struct MyStruct { int data; };

std::vector<MyStruct&> hello;
Copier après la connexion

Cependant, il est important de noter que cette stratégie peut conduire à des références pendantes si les objets référencés sont supprimés ou déplacés.

  • Utiliser une classe Wrapper : Vous pouvez créer une classe wrapper qui contient une référence en interne et fournit une interface attribuable. Cela vous permet d'utiliser la classe comme élément conteneur.
class Wrapper {
protected:
    int& _data;
public:
    Wrapper(int& data) : _data(data) {}
};

std::vector<Wrapper> hello;
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal