質問:
多くのコンパイラは bool を格納しているようです値は 0 または 1 のいずれかになりますが、この動作は保証されますか?具体的には、次のスニペット内:
int a = 2; bool b = a; int c = 3 + b; // 4 or 5?
回答:
はい、bool 値は int に変換されるときに 0 または 1 に変換されることが保証されます。この動作は、C と C 標準の両方で定義されています。
C (§4.5/4):
bool 型の右辺値は、次の右辺値に変換できます。 int 型で、false は 0 になり、true は 1 になります。
C (§6.3.1.2/1):
スカラー値が _Bool に変換されると、値が 0 と等しい場合、結果は 0 になります。それ以外の場合、結果は 1 です。
したがって、指定された例では、b は 0 (a が 0 に等しい場合) または 1 (a が 0 に等しい場合) に変換されます。 b に 3 を加えると、a の値に応じて 4 または 5 になります。
以上がbool から int への変換は 0 または 1 であることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。