„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum gibt `std :: vector :: reference` keine" bool & "zurück?

Warum gibt `std :: vector :: reference` keine" bool & "zurück?

Gepostet am 2025-03-11
Durchsuche:617

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

warum Vector :: referenz nicht auf bool?

in c, der std :: vector Container ist spezialisiert für boolesche Werte. Diese Spezialisierung führt Unterschiede im Verhalten im Vergleich zu Vektoren anderer Datentypen ein.

Die Ausgabe

In dem angegebenen Beispiel wird eine Funktion Calliftoggled verwendet, um einen BOOL -Wert zu umschalten und eine Methode auf einer Struktur aufzurufen. Beim Versuch, einen Verweis auf ein Element eines std :: vector an calliftoggled zu übergeben, tritt ein Kompilierungsfehler auf. Dies liegt daran, dass der von Vector :: referenz zurückgegebene Referenztyp nicht das erwartete Bool &.

der Vernunft

innerhalb der Bool Vector -Spezialisierung, Vector :: Referenz gibt eine Referenz auf ein Zeichen zurück, nicht ein Zeichen. Dies geschieht, um die Leistung zu optimieren, indem eine bitgewise Darstellung für booleale Werte verwendet wird. Bibliothek:

Die Boost -Container -Bibliothek bietet eine unspezialisierte Version von Vector , die eine echte Referenz zu Bool -Werten bietet.

Wrap -Bool -Werte in einer Struktur:

Erstellen Sie eine Wrapper -Struktur, die als MyBool bezeichnet wird. Dies ermöglicht das Übergeben eines Verweiss auf den Wrapper, der wiederum den indirekten Zugriff auf den zugrunde liegenden Bool -Wert bietet. Struktur a { void foo () {} }; Vorlage 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 = falsch; A a; Calliftoggled (f, v [0], a); Calliftoggled (F, V [1], a); Calliftoggled (f, v [2], a); }
    Neuestes Tutorial Mehr>

    Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

    Copyright© 2022 湘ICP备2022001581号-3