这样定义,我们两个都做不到 ++x++
也不 ++x--
。但另一方面,两者兼而有之 (++x)++
和 (++x)--
是有用的表达式: (++x)++
增量 x
两个并返回值“在中间”,而 (++x)--
基本上相当于 x+1
但完全避免不得不打电话 operator+
,有时可能非常有用。
那么为什么没有定义优先权 ++x++
自动扩展到 (++x)++
而不是 ++(x++)
?后者是否有一些隐藏的含义,我不明白,或者只是将优先级保持为一个简单的列表,所有前缀运算符组成一个单一的级别?
编辑 好吧,我没有明确说出来,但是:当然我的意思是 x
是用户定义的类型。对于内置类型, (x+=2)-1
当然比...更好 (++x)++
,和 x+1
是一个 批量 比...更好 (++x)--
。我想到的情况是一个相当复杂的半关联容器的迭代器,其中运算符 +=
和 +
(被设计用于随机访问)必须重建缓存以便有效地处理一般请求,因此比一个数量级慢一个数量级。 ++
。但是我当然可以修改它们以便总是首先检查参数是否是一个非常小的整数,在这种情况下只需要调用 operator++
反复而不是做随机访问程序。这应该可以在这里工作,虽然我可以想象我可能在某种程度上有我想要的情况 operator+=
始终采用随机访问方式,无论我呈现的数量有多少。
所以...对我来说,我会得出答案:
具有简单且可记忆良好的优先级列表的优点 所有 后缀运算符来了 任何 前缀运算符足以容忍总是必须使用括号来组成前缀和后缀运算符的小缺点
++
/--
因为这种成分很少使用。
更简单的“C就是这样做的”,而它似乎很可能 真实 理由,对我来说远不那么令人满意,因为从那以后 ++x++
是不允许的 一点都不 在C语言中,可以在不损坏任何现有代码的情况下重新定义这个组合。
无论如何,我会继续使用 (++x)--
,因为括号真的不疼那么多。