C#とC++のbool型の扱い、条件分岐での使い方

自分へのメモ。

if文の括弧内の評価とbool値の関係を、C++を触るたびに検索してるので記録しておく。

どの言語でも共通のif文の定義

if文は評価結果が真の時に実行される

if( $COND )
{
   // $CONDの評価結果が[真]の時に実行される
}
else
{
   // $CONDの評価結果が[偽]の時に実行される
}
  • 式の評価
    • 括弧内は左から順に実行される
      • if(method_1() || method_2())なら左から順に実行されて評価結果になる
      • if(1 + 2 == 3)なら計算した結果が3と比較されて評価結果となる

C#の場合

bool型とint型は総合に関係がない。代入も不可能。

bool flag_1 = 0; // Error

だから、以下のようにしても問題ない。

if (this.isExecuting)
{
   // 実行中ならここを通る
}

だから、以下の書き方は不可能。

if(1)
{
    // ...省略...
}

C++の場合

boolはintと互換がある。なので以下の規則で動いている。

  • bool型はintに変換できる
    • false = 0
    • true = 0以外
bool flag_1 = 0; // falseで初期化と同じ

int value = 10;
bool flag_2 = value; // trueで初期化と同じ

以下の2通り(だけじゃないけど)の書き方ができる。

if (true)
{
   // 必ずここが実行される
}

if (1)
{
   // 必ずここが実行される
}

if (0)
{
   // 絶対に通らない
}

また、boolが数値と関係あるため、char c = ‘0’, double d = 0.0fをboolに代入がOKだけど理解に苦しむのでやめた方がいい。

あと、

bool flg = true;

if (flg == true) // 2重で確認
{
   // ...省略...
}

の意味合いは精神的には異なる。C++のほうが1層意味が多い。どう書いてもいいけど、その事を知っていることが大切。