ページ 11

'bool' 型から 'int' 型への上位変換

Posted: 2010年11月20日(土) 22:44
by kokuoutyou
if(!sk==1001||!sk==99)
を使うとなぜ
warning C4806: '==' : 安全でない演算: 'bool' 型から 'int' 型への上位変換を
行うと与えられた定数に等しくなりません
というエラーが出るのでしょうか?

使用言語 C++
使用ライブラリ DXライブラリ
環境 Visual C++ 2008 Express Edition

Re:

Posted: 2010年11月20日(土) 23:00
by 初級者
回答するための情報が足りません。

例えば、skの型は何ですか?

Re:

Posted: 2010年11月20日(土) 23:06
by kokuoutyou
skはキー入力したやつを格納するやつ(数値)
別の方法ほ使って解決しました
回答ありがとうございました

Re:'bool' 型から 'int' 型への上位変換

Posted: 2010年11月21日(日) 00:52
by ISLe
#あとからログを見る人のために
演算子の優先順位の関係で
if ((!sk) == 1001 || (!sk) == 99)
と解釈されるためです。
!演算子でboolになってしまってるのに数値(int型)と比較してますけど大丈夫?
とコンパイラが心配してくれているのです。

期待しているのは
if (!(sk == 1001) || !(sk == 99))
ということかと思いますけどこれでは常に成立してしまうので意味が無いですね。
わざわざ二重否定して訳が分からなくなっているように見えます。

ほんとうにやりたかったことは
if (sk != 1001 && sk != 99)
ということでしょうか。

【編集】タグ外の改行がなくなってしまうのでpreタグを削除 画像