Heim >Backend-Entwicklung >C++ >Warum gibt „std::vector::reference' kein „bool&' zurück?

Warum gibt „std::vector::reference' kein „bool&' zurück?

Susan Sarandon
Susan SarandonOriginal
2024-12-09 00:42:10827Durchsuche

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

Warum vector::reference keinen Verweis auf Bool zurückgibt?

In C ist der std::vector

Das Problem

Im bereitgestellten Beispiel wird eine Funktion callIfToggled verwendet, um einen booleschen Wert umzuschalten Rufen Sie eine Methode für eine Struktur auf. Beim Versuch, einen Verweis auf ein Element eines std::vector Beim Aufruf von IfToggled tritt ein Kompilierungsfehler auf. Dies liegt daran, dass der von vector::reference zurückgegebene Referenztyp nicht der erwartete bool& ist.

Der Grund

Innerhalb der Bool-Vektorspezialisierung ist vector

Lösungen

  • Verwenden Sie vector Stattdessen: Ersetzen Sie den Bool-Vektor durch einen Vektor um das Spezialisierungsproblem zu umgehen.

  • Boost-Container-Bibliothek verwenden: Die Boost-Container-Bibliothek bietet eine nicht spezialisierte Version von vector das bietet einen echten Verweis auf Bool-Werte.
  • Bool-Werte in eine Struktur einschließen: Erstellen Sie eine Wrapper-Struktur um Bool mit dem Namen MyBool. Dies ermöglicht die Übergabe einer Referenz an den Wrapper, der wiederum indirekten Zugriff auf den zugrunde liegenden Bool-Wert ermöglicht.
  • Beispiel (Vektor von Char):

    #include <vector>
    
    struct A
    {
        void foo() {}
    };
    
    template<typename T>
    void callIfToggled(char v1, char &v2, T &t)
    {
        if (v1 != v2)
        {
            v2 = v1;
            t.foo();
        }
    }
    
    int main()
    {
        std::vector<char> 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);
    }

    Das obige ist der detaillierte Inhalt vonWarum gibt „std::vector::reference' kein „bool&' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn