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
876 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!

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