我有一些书中的代码:)
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)
开始。它更多的是关于运营商的优先权。
答案 0 :(得分:0)
使用m_uIloscLiczb++
,您正在调用postfix-increment运算符,该运算符返回操作数的值,如增量之前(在您的示例中为0)。
使用++m_uIloscLiczb
,您将调用前缀增量运算符,该运算符返回操作数的值,因为它在递增后(在您的示例中为1)。