以这种方式定义,我们既不能做++x++
也不做++x--
。但另一方面,(++x)++
and(++x)--
都是有用的表达式:(++x)++
递增x
2 并返回“中间”的值,while(++x)--
本质上等同于x+1
但完全避免了调用operator+
,这有时非常有用。
那么为什么优先级没有定义为++x++
自动扩展为(++x)++
而不是++(x++)
?后者是否有一些我不理解的隐藏含义,或者只是为了将优先级保持为一个简单的列表,所有前缀运算符构成一个级别?
编辑好吧,我没有明确说出来,但是:当然我的意思x
是用户定义的类型。对于内置类型,(x+=2)-1
当然比好(++x)++
,而且x+1
比. 我想到的情况是一种相当复杂的半关联容器类型的迭代器,其中操作员和(设计用于随机访问)必须重建缓存才能有效地处理一般请求,因此是一个命令幅度比 慢。但是当然我可以修改它们以始终首先检查参数是否是一个非常小的整数,在这种情况下只需调用(++x)--
+=
+
++
operator++
重复而不是执行随机访问过程。这在这里应该可以正常工作,尽管我可以想象我可能会在某个时候遇到这样一种情况,即我想operator+=
始终采用随机访问方式,而不管我呈现的数字有多小。
所以......对我来说,我的结论是:
拥有一个简单且易于记忆的优先级列表(其中所有后缀运算符都位于任何前缀运算符之前)的优势足以容忍始终必须使用括号来组合前置和后置运算符
++
/的小缺点--
,因为这种组合是很少使用。
更简单的“C 这样做”,虽然这似乎是真正的原因,但对我来说远没有那么令人满意,因为因为在 C++x++
中根本不允许,所以可以重新定义这个组合而不破坏任何现有代码。
无论如何,我会继续使用(++x)--
,因为括号真的没有那么大的伤害。