まずこんな関数が有るとして
bool Foo(){
return false;
}
でこの時、
main(){
 int a = 0;
 bool b = true;
 if (a == 0 && b || Foo())  // A
  a = 1;
 if (a == 0 && b || Foo())  // B
  a = 1;
}
と言う事をするとAではFoo()は呼ばれません。
これはbがtrueだからFooを実行しなくともifは真になる為、呼ばれないのは解ります。
しかしBではFoo()が呼ばれてしまいます。
漏れ的考えではa=1になってる為に最初のa == 0で偽になり、その後の条件は実行されないと思っていましたが・・・。
これは一体何故でしょう?
なお、コンパイラはVC++6.0です。