17

このコードを見てください:

#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.14V()

double V() const { return (4/3) * 3.0 * pow(r,3); }

次に、出力は次のとおりです。84.78 == 84.78 : 1

ここで何が起こっているのですか?私のプログラムでは、2 つのオブジェクトのボリュームを比較するこの方法が必要ですが、不可能ですか? 問題の原因を突き止めるために長い間頭を叩き、幸運にもそれを見つけましたが、今では理由がわかりません?? コンパイラ (GCC) と関係がありますか、それともここで重要な何かが欠けていますか?

4

2 に答える 2