当有人询问后自增/自减和前自增/自减之间的区别时,答案通常是前缀版本将变量加一并返回变量的新值,而后缀版本将变量加一并且返回旧值。
在胡闹的时候,我发现所有这些行都是合法的:
int i = 1;
++i;
++++++++++++++i;
(++++++++++++++i)++;
(++++++(++++(++i)))++;
------i;
--++++--++----++i;
i+=++++++++++++++i+i++-i--;
但以下行都不合法:
i++++;
++i++;
--i--;
如果我假设前缀版本通过引用返回,这一切都是有道理的(即使是最后一个示例,因为后缀的优先级高于前缀)。
前缀版本返回引用而后缀版本返回值的假设/实现是否正确?对于 pre/post inc/decrement 运算符,是否还有其他我不知道的细微行为差异?