averagefunctor语言 - 它或VS2013有问题

CAverageFunctor - is something wrong with it or with VS2013

本文关键字:VS2013 有问题 它或 语言 averagefunctor      更新时间:2023-10-16

我有一段来自某本书的代码:)

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);

据我所知,它应该是多重的。然后是监禁和休息,但它没有…同样2:

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

这应该在除…之前递增。所以最后一个问题:我错过了什么还是VS2013只是一个坏人?哦,我不想要这样的答案:你应该从m_uIloscLiczb(1)开始。

对于m_uIloscLiczb++,您调用的是后自增运算符,它返回操作数递增之前的值(在您的示例中为0)。

对于++m_uIloscLiczb,您正在调用前缀自增运算符,它返回操作数的值,因为它是递增后的(在您的示例中,1)。