【3月6日実施】システムメンテナンス実施のお知らせ

よろしくお願いします。

vc2008でif文の条件として例として以下のように

int a = 1;
double b = 1.5;
if(a < b){}

としました。
確か異なる型の比較はまずかったように思うのですが、
このままビルドが通ってしまいました。

特に警告などが出ず、ビルドが通ってしまうのはvc2008が
自動で補正したりしているからなのでしょうか?
ご存知の方おりましたら教えてください。

A 回答 (4件)

> 確か異なる型の比較はまずかったように思うのですが



(比較演算も含めて)演算の際は、必要かつ可能ならば暗黙の型変換で型を揃えます。
今回はdoubleとintで、doubleに合せるので、特に問題ありません。

問題になるのは unsigned と signed との比較ですね。

(signed int)-1 > (unsigned int)0 が真になる、等、値の型の範囲を越えている場合におかしく見える現象が起ります。
    • good
    • 0
この回答へのお礼

比較もdoubleにキャストされると思っていませんでした。
今回は問題なく解決しました、ありがとうございました。

お礼日時:2011/05/25 21:51

>確か異なる型の比較はまずかったように思う



勘違いをされてます。
    • good
    • 0
この回答へのお礼

警告は感違いでした。
ありがとうございます。

お礼日時:2011/05/25 21:49

「通常の算術型変換」というやつです。

    • good
    • 0
この回答へのお礼

比較は違うと考えていました。
ありがとうございます。

お礼日時:2011/05/25 21:47

暗黙のうちにaもdoubleにキャストされた上で比較されています。


これはVCだからという話ではなく、C言語自体の仕様です。

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec04.html
    • good
    • 0
この回答へのお礼

演算をするときと同じに考えればよいのですね、理解できました。
ありがとうございました。

お礼日時:2011/05/25 21:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています