Verstehen, dass vector::reference keinen Bool zurückgibt&Referenz
In C ist der Vektor Die Klasse ist auf boolesche Werte spezialisiert. Dies bedeutet, dass sich bestimmte Vorgänge für diesen bestimmten Typ möglicherweise anders verhalten als für andere Typen.
Ein solches Verhalten hängt mit der Methode vector::reference zusammen, die normalerweise einen Verweis auf das Element am angegebenen Index zurückgibt. Im Fall von vector gibt die Methode vector::reference jedoch eine Zeichenreferenz anstelle einer bool>-Referenz zurück. Dies kann zu Kompilierungsfehlern führen, wenn Sie versuchen, eine vector::reference an eine Funktion zu übergeben, die einen bool&-Parameter erwartet.
Grund für diese Spezialisierung
Der Der Grund für diese Spezialisierung liegt in der Art und Weise, wie boolesche Werte in C intern dargestellt werden. Boolesche Werte werden als einzelne Bits gespeichert und der direkte Zugriff darauf als boolsche Referenzen kann ineffizient sein. Durch die Verwendung eines Zeichens als Vermittler kann der Vektor Die Klasse kann bestimmte Vorgänge optimieren, z. B. das Setzen und Zurücksetzen mehrerer Bits.
Umgehung dieser Spezialisierung
Es gibt einige Möglichkeiten, diese Spezialisierung zu umgehen und dennoch Referenzen zu verwenden zu booleschen Elementen in einem Vektor:
-
Use vector stattdessen: Sie können boolesche Werte als char-Werte speichern und vector um eine Sammlung boolescher Werte darzustellen.
-
Boost-Container verwenden: Die Boost-Container-Bibliothek enthält eine Version von vector das nicht über diese Spezialisierung verfügt und Ihnen den direkten Zugriff auf Elemente als bool&-Referenzen ermöglicht.
-
Benutzerdefinierte Spezialisierung: Sie können Ihre eigene spezialisierte Version von vector erstellen. das gibt bool&-Referenzen zurück. Dies ist jedoch ein komplexer und fehleranfälliger Ansatz.
Das obige ist der detaillierte Inhalt vonWarum gibt „vector::reference' in C 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