LoginSignup
4
2

More than 5 years have passed since last update.

C/C++ の bool(条件式) に関する暴論

Posted at

こまけーこたーいいんです。

その式を評価したときに 0 になるか、そうでないか。
0 なら false.
そうじゃなかったら true.

そんだけ。

ちなみに条件式っていうのは、

  if (a == 1) { 処理1 } else { 処理2 }

の a == 1 のところね。
if 文はこの条件式が 0 かどうかで分岐するって命令だから別にこう書いてもいい。

  if (a - 1) { 処理2 } else { 処理1 }

少なくともコンパイルは通る。
(とはいえ、こんなコードを渡されたら有罪を申し立てるけど。)

上の a == 1 だと、== は 「左辺と右辺が等しくなかったら 0 を返す、そうでなかったら 0 でない値 を返す」演算子なので、if 文が動くと思っておけばいい。

他にも、for (初期化式; 条件式; ?式) とか while (条件式) とかでも全く同じ。三項演算子とかでも同じ。
例えば

  while("無限ループ") { 処理 }

これだと、"無限ループ" が定数式とみなされて、文字列のアドレス(0じゃない値になる)として評価されて、0 じゃないから処理の中でbreakしない限りループする。まぁ最近のコンパイラだと警告出るけど。

b == true だったらどうなんだとか、コンパイラがその式から 0 を作ってるからそれでいいのだ。
異論反論は多々あるだろうけれど、そんなもんはコンパイラを作ってるような人に任せておけば良くって、とりあえず何か作るんだったらこれでいいのだ。

C# とかでは通用しないから注意。

4
2
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2