sizeof(bool)はC ++言語標準で定義されていますか?


回答:


167

sizeof(bool) 実装が定義されており、規格はこの事実に特に重点を置いています。

§5.3.3/ 1、要約:

sizeof(char)sizeof(signed char)およびsizeof(unsigned char)1です。sizeof他の基本タイプに適用した結果は、実装によって定義されます。[注:特に、sizeof(bool)およびsizeof(wchar_t)実装定義です。69) ]

脚注69):

sizeof(bool) 1である必要はありません。


私のプログラムをコンパイルする必要があるフラグはありboolますか?私のコンパイラは1バイトだけを使用しますか?
イーグル、

3
@イーグル:それはあなたのコンパイラ次第です、私にはわかりません。おそらくコンパイラに任せるのが最善です。
GManNickG 2011年

5
std :: vector <bool>は、標準で1ビットのブール値を含むベクトルに最適化されていることに注意してください。
user3063349 2016

15

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

「Visual C ++ 4.2では、標準C ++ヘッダーファイルにboolをintと同等にしたtypedefが含まれていました。VisualC ++ 5.0以降では、boolは1バイトのサイズの組み込み型として実装されています。つまり、Visual C ++ 4.2では、sizeof(bool)の呼び出しで4が生成されますが、Visual C ++ 5.0以降では、同じ呼び出しで1が​​生成されます。ファイル(OBJ)および/または4.2および5.0以降のコンパイラでビルドされたDLL。


2
これは質問にいくらか関連していることに気づいていますが、明確に答えではありません。0xbadf00dは、特定の/任意に選択されたコンパイラの実装ではなく、標準について尋ねたからです。
Christopher Creutzig 2013

13
@ChristopherCreutzig反例による証明です。
kinokijuf 2014年

12
@kinokijufこれは反例ではありません。Visual C ++には、標準に準拠していないものがたくさんあります。
0xbadf00d 2016年

11

実装が定義されています。標準のみsizeof(char)です1


2
plsは、標準の1が4バイトを意味する場合があることに注意してください。すべてのタイプが4の積であるというわけではありません。したがって、標準はcharが1のみを定義し、測定を定義しないことに注意してください。
user3063349 2016

1は、標準で8ビットまたは1バイトを意味します
16

11
1バイト。1バイトあたりのビット数は標準では定義されていませんが(少なくとも8 IIRCである必要があります)、CHAR_BITで定義されていclimitsます。
peoro

3

5.3.3段落1を参照してください。

[注:特に、sizeof(bool)とsizeof(wchar_t)は実装定義です。69)]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.