CAverageFunctor - 它或VS2013有问题

时间:2014-08-16 11:24:15

标签: c++ visual-studio-2013

我有一些书中的代码:)

class CAverageFunctor
{
private:
    double m_fSrednia;
    unsigned m_uIloscLiczb;
public:
    CAverageFunctor() : m_fSrednia(0.0), m_uIloscLiczb(0) { }

    void Reset() { m_fSrednia = m_uIloscLiczb = 0; }

    double operator()(double fLiczba)
    {
        m_fSrednia = (((m_fSrednia * m_uIloscLiczb) + fLiczba)
            / m_uIloscLiczb++);
        return m_fSrednia;
    }
};

在书中它有自己的功能,但我感兴趣的原因除以0 :)所以我修改了:

m_fSrednia = (((m_fSrednia * m_uIloscLiczb++) + fLiczba)
                / m_uIloscLiczb);

据我了解,它应该倍增。然后是摄影和休息,但它不...相似的第二个:

m_fSrednia = (((m_fSrednia * m_uIloscLiczb) + fLiczba)
                / ++m_uIloscLiczb);

这应该在分开之前增加...所以最后问题:我错过了什么或VS2013只是坏人?哦,我不想要这样的答案:你应该从m_uIloscLiczb(1)开始。它更多的是关于运营商的优先权。

1 个答案:

答案 0 :(得分:0)

使用m_uIloscLiczb++,您正在调用postfix-increment运算符,该运算符返回操作数的值,如增量之前(在您的示例中为0)。

使用++m_uIloscLiczb,您将调用前缀增量运算符,该运算符返回操作数的值,因为它在递增后(在您的示例中为1)。