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