web-dev-qa-db-ja.com

intをboolにキャストすると警告が表示されるのはなぜですか?

暗黙の変換の逆に変換するので、intをboolに変換するためにstatic_castを使用しても大丈夫ではありませんが、それでも警告が表示されますか?

例:

MSVC++ 8

bool bit = static_cast<bool>(100);
14
user4344

変換a => bが暗黙的であるという理由だけで、逆の実行可能性については何も言いません、b => a。

あなたの場合、キャストするべきではありません。明白なことをしてください:比較してください:

bool result = int_value != 0;

これは、intboolに変換する唯一の論理的に正しい方法であり、コードをはるかに読みやすくします(仮定が明示的になるため)。

ちなみに、逆も同じです。暗黙的にboolからintに変換するのは面倒です。マッピングを明示的にします。

int result = condition ? 1 : 0;
48
Konrad Rudolph

それはあなたとあなたのコンパイラの間ですが、マイクロソフトはあなたが書くべきだと考えています:

i != 0

どちらよりも優先して:

(bool)i

または

static_cast<bool>(i)

それを好む考えられる理由は次のとおりです。

  • この変換は、モジュラスを取る他のナローイング変換のようには機能しません。
  • boolへの暗黙の変換も少し物議を醸しています。多くの人は、mallocを呼び出した後、if (buf != NULL)よりもif (buf != 0)またはif (buf)を実行することを好みます。
  • 比較はより短く、より明確です。
9
Steve Jessop

明示的にキャストしたときになぜ発生するのかはわかりませんが(パフォーマンスの警告だったと思いますか?)、警告を回避するために通常は次のようなコードを使用します。

int i;
bool b = (0!=i);

これは警告を与えることはありません。

3
sashoalm