In C ++ frage ich mich, warum der Bool-Typ 8 Bit lang ist (auf meinem System), wobei nur ein Bit ausreicht, um den Booleschen Wert zu speichern.
Früher glaubte ich, dies sei aus Leistungsgründen der Fall, aber was ist dann auf einem 32-Bit- oder 64-Bit-Computer, auf dem die Register 32 oder 64 Bit breit sind, der Leistungsvorteil?
Oder ist es nur einer dieser "historischen" Gründe?
sizeof(bool)
es 4 geben würde. Ich könnte schwören, dass msvc 32-Bit-Bools hat, aber ich habe es nur versucht und es nicht.
vector<bool>
nicht darin, dass es versucht, klug zu sein und Bools in Stücke zu packen, sondern dass es versucht, dies zu tun und sich als STL-Container zu tarnen . Ein einfaches Bitset wäre in Ordnung gewesen, solange es nicht auch vorgibt, ein STL-Container zu sein.
bool
Datentyp mit dem Windows- BOOL
Typ, auf den typisiert ist long
. Also sizeof(bool) != sizeof(BOOL)
, was sicher viel Verwirrung stiftet (und wahrscheinlich eine ganze Reihe von Fehlern). Zumal es auch boolean
und BOOLEAN
typedefs in Windows gibt, die Aliase für sind unsigned char
. Beachten Sie außerdem, dass bool
der C ++ - Standard zwar 1 Byte enthält, der Hinweis jedoch ausdrücklich angibt, sizeof(bool)
dass er größer sein kann.