Hacker News new | ask | show | jobs
by mekazu 2374 days ago
> Therefore, this line actually says:

    !didIMakeAMistake() || CIsWrongHere();
> If you understand how short-circuit evaluation works, you can understand that this will result in the following:

   if (!didIMakeAMistake()) 
      CIsWrongHere();
Can someone explain this? I’d have thought that was right without the !
1 comments

It must be a typo.

Function calls have the highest priority here, followed by logic NOT and logic OR.

    !didIMakeAMistake() || CIsWrongHere();
!didIMakeAMistake() is evaluated first (or you can say didIMakeAMistake() is executed and evaluated first, then its result is inverted and checked), if it's true, evaluation is finished. If it's false, CIsWrongHere(); is evaluated.

It is indeed equivalent to

   if (didIMakeAMistake())  /* !didIMakeAMistake() == false? */
      CIsWrongHere();
Without the invertion.
Thank you guys so much! I've changed it immediately.