自分へのメモ。
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層意味が多い。どう書いてもいいけど、その事を知っていることが大切。