C++相談室 part82
■ このスレッドは過去ログ倉庫に格納されています
0234デフォルトの名無しさん
2010/06/18(金) 16:50:25すると、全く同じプログラムなのに結果が違う。ちなみにMATLABの結果は
VC++の結果と一致している。
2日ほど悩んでいたが...
原因は、何と自作のライブラリファイルで使っていたabs関数に「std::」をつけて
いないことだったorz。
xをdouble型の変数としてabs(x)を呼べば関数のオーバーロードによって
double abs(double x) が呼び出されると思っていたのにgccではint abs(int i)
が呼び出されていて結果が違っていた。xがdoubleであってもintに型キャスト
されるため整数部(の絶対値)のみが返ってきていた。
これはC++の数学関数が標準名前空間std内にあることによるのだろうが
(ちなみに #include <cmath>としている)、VC++では「std::」をつけなく
ても問題なく、double abs(double x) が呼ばれている。
C++の仕様としては、gccとVC++どちらが正しいでしょうか?
「std::」をつけなくてもコンパイルエラーや警告がでず、意図しない
別のabsが呼ばれるgccの方が怖いですけど。
■ このスレッドは過去ログ倉庫に格納されています