Ich frage mich, warum std::bitset::reference
und std::vector<bool>::reference
einen expliziten Destruktor angibt (nicht Compiler generiert). Beispielsweise scheint boost::dynamic_bitset::reference
einen solchen Destruktor nicht anzugeben.Warum gibt der C++ - Standard einen Destruktor für std :: bitset :: reference an?
Antwort
Nur weil die Standard-~reference()
als destructor erwähnt, bedeutet nicht, es vom Benutzer bereitgestellte als no-op sein muss {}
(das ist, wie libstdc++ und SGI/STL es tun). Es könnte auch vom Benutzer als =default
deklariert werden, oder sogar implizit links definiert werden (wie es libc++ tut). Unabhängig davon könnte der Standard aktualisiert werden, um diese explizite Erwähnung des Destruktors zu entfernen. Sie könnten eine redaktionelle Änderung einreichen (ich glaube nicht, dass dies einen echten Vorschlag rechtfertigt).
Wie von @BoPersson in den Kommentaren festgestellt, ist std::bitset
eine sehr alte Komponente der Standardbibliothek. Viele seiner Merkmale (impliziter Konstruktor aus vorzeichenloser Ganzzahl, Mitglied anstelle von Nichtmitglied operator==
) gehen vor der Standardisierung der Sprache im Jahr 1998 voraus. Schamlose Stecker: siehe z.B. this Q&A für weitere Diskussion, wie dies entstanden sein könnte, und this Q&A für warum es Code brechen könnte, wenn dies behoben wäre.
<rant mode>
Der beste Weg, aus dem Erbe der std::bitset
wäre ein sauberer Bruch in namespace experimental
sein. Vorzugsweise würde dies auch die gemischte Abstraktion von std::bitset
lösen, die gleichzeitig versucht, eine raumoptimierte Version von array<bool>
sowie eine set<int>
zu sein. Idealerweise würde es einen Vorschlag für eine bool_array<N>
und eine bounded_int_set<N>
geben, die diese Abstraktionen bereitstellt. In ähnlicher Weise könnten bool_vector<Alloc>
(derzeit bekannt als vector<bool, Alloc>
) und int_set<Alloc>
(gegenwärtig eine Mischung aus boost::dynamic_bitset
und boost::container::flat_set<int, Alloc>
) definiert werden.
</rant mode>
Jemand schrieb dies in den 1990er Jahren auf, und niemand hat vorgeschlagen, es zu ändern, da? Kein anderer Grund, denke ich. –