操作符++使用时可能引起意想不到的问题
如下:
int m_i = 0;
int m_r = 0;
m_r = (m_i++*2)+(m_i++*3);
本意可能是:
m_r1 = m_i*2, m_i++ //0*2 m_i=1
m_r2 = m_i*3, m_i++ //1*3 m_i=2
m_r = m_r1 + m_r2 //m_r=0+3
由于m_r的计算和m_r2的计算优先级相等,
所以编译器可以以任意顺序计算,
因此结果有可能是先计算m_r2=0,再计算m_r1=2。
结果m_r就存在两种可能值2或3.
为避免此类问题发生,++操作符应作为单独一条语句使用
--操作符存在同样的隐蔽性问题。