このコードを見てください:
#include <cmath>
#include <iostream>
using namespace std;
class Sphere
{
double r;
public:
double V() const { return (4/3) * 3.14 * pow(r,3); }
bool equal(const Sphere& s) const
{
cout << V() << " == " << s.V() << " : " << ( V() == s.V() );
return ( V() == s.V() );
}
explicit Sphere(double rr = 1): r(rr){}
};
main()
{
Sphere s(3);
s.equal(s);
}
出力は84.78 == 84.78 : 0
、すべてのパラメーターが静的であっても、同じメソッドが毎回同じ値を返さないことを意味しますか?
しかし、メソッド定義の3.0
代わりに次のように書くと:3.14
V()
double V() const { return (4/3) * 3.0 * pow(r,3); }
次に、出力は次のとおりです。84.78 == 84.78 : 1
ここで何が起こっているのですか?私のプログラムでは、2 つのオブジェクトのボリュームを比較するこの方法が必要ですが、不可能ですか? 問題の原因を突き止めるために長い間頭を叩き、幸運にもそれを見つけましたが、今では理由がわかりません?? コンパイラ (GCC) と関係がありますか、それともここで重要な何かが欠けていますか?