これが MS Visual Studio 2005 (およびおそらくその他) でコンパイルされていることを考慮してください。
CPoint point1( 1, 2 );
CPoint point2( 3, 4 );
const bool point1And2Identical( point1 == point2 ); // C4800 warning
const bool point1And2TheSame( ( point1 == point2 ) == TRUE ); // no warning
なに…?MSVC コンパイラは脳死状態ですか? 私が知る限り、TRUE は型情報なしで #1 として定義されています。では、これらの 2 つの行に違いがあるのは、どのような魔法によるのでしょうか? どちらの場合も、括弧内の式の型は同じですか? [質問のこの部分は、すぐ下のコメントで満足のいく回答が得られました]
個人的には、== TRUE オプションを使用して警告を回避するのは見苦しいと思います (厳密には != 0 の選択肢よりも見苦しくないですが)。 「私のコードは優れているが、コンパイラはお尻だ」とほのめかします。同意?
注 - C4800 に関するあらゆる種類の議論で、int を bool に代入することや、大きなフライド ポテト (タマネギを保持) を含むハンバーガー コンボを bool にキャストすることについて話しているのを見てきました。はるかに単純な質問のように見えるものについて、明確な答えが見つかりません...それは、一般的にC4800に一線を画すだけかもしれません。