"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi `STD :: Vector :: Reference` ne renvoie-t-il pas un` bool & `?

Pourquoi `STD :: Vector :: Reference` ne renvoie-t-il pas un` bool & `?

Publié le 2025-03-11
Parcourir:398

Why Doesn't `std::vector::reference` Return a `bool&`?

Pourquoi vector :: référence ne renvoie pas la référence à bool?

Dans c, le conteneur std :: Vector est spécialisé pour les valeurs booléennes. Cette spécialisation introduit des différences de comportement par rapport aux vecteurs d'autres types de données.

Le problème

Dans l'exemple fourni, une fonction calliftoggled est utilisée pour basculer une valeur bool et appeler une méthode sur une structure. Lorsque vous essayez de transmettre une référence à un élément d'un Vector STD :: Vector> à Calliftoggled, une erreur de compilation se produit. En effet, le type de référence renvoyé par Vector :: La référence n'est pas le bool attendu et.

La raison

dans la spécialisation Bool Vector, Vector :: Renvoie une référence à un char, pas un bool. Ceci est fait pour optimiser les performances en utilisant une représentation bit Library:

La bibliothèque Boost Contaters fournit une version non spécialisée de Vector qui offre une vraie référence aux valeurs bool.

Enveloppez les valeurs bool dans une structure:

Créer une structure de wrapper autour de Bool appelé Mybool. Cela permet de passer une référence à l'emballage, qui à son tour fournit un accès indirect à la valeur bool sous-jacente.
  • Exemple (vecteur de char):
  • # include struct a { void foo () {} }; modèle void CalliftogGled (Char V1, Char & V2, T&T) { if (v1! = v2) { v2 = v1; t.foo (); } } int main () { std :: vector v = {false, true, false}; const char F = false; A A; Calliftoggled (f, v [0], a); Calliftoggled (f, v [1], a); Calliftoggled (f, v [2], a); }
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3