C ++では、ブール型が8ビット長(システム上)であり、ブール値を保持するのに1ビットだけで十分なのはなぜでしょうか。
以前はパフォーマンス上の理由であると信じていましたが、32ビットまたは64ビットのマシンで、レジスターが32ビットまたは64ビット幅である場合、パフォーマンスの利点は何ですか?
それとも、これらの「歴史的な」理由の1つにすぎませんか?
sizeof(bool)
が、4になります。msvcに32ビットのブール値があることを私は誓うことができましたが、試してみましたがそうではありませんでした。
vector<bool>
言えば、の問題は、巧妙になってブール値をビットにパックしようとすることではなく、これを実行してSTLコンテナとして偽装しようとすることです。プレーンなビットセットは、STLコンテナのふりをしない限り問題ありません。
bool
データ型を、BOOL
typedefされたWindows 型と混同している可能性がありますlong
。だからsizeof(bool) != sizeof(BOOL)
、私は確かに多くの混乱を引き起こします(そしておそらくかなりの数のバグを引き起こします)。特に、Windowsにはboolean
とBOOLEAN
typedef があり、のエイリアスですunsigned char
。また、bool
1バイトであることが一般的ですが、C ++標準には、それsizeof(bool)
が大きくなる可能性があることを具体的に示す注記があります。