那么为什么优先级没有定义为将x自动扩展为(x)而不是(x)?对于后者我有什么隐含的意义,我不明白,还是只是为了保持一个简单的列表,所有前缀运算符组成一个单一的级别?
编辑好的,我没有明确说出来,但是我当然意味着x是用户定义的类型.对于内置类型,(x = 2)-1当然比(x)好,x 1比(x) – 好多了.我想到的情况是对一个相当复杂类型的半关联容器的迭代器,其中运算符=和(被设计为随机访问)必须重建缓存以便有效地工作以用于一般请求,因此是数量级比.但是,当然,我可以修改它们,以便始终检查参数是否是一个非常小的整数,在这种情况下,只需重复调用运算符,而不是执行随机访问过程.这应该可以在这里工作,虽然我可以想象我可能在某种程度上有一种情况,我希望operator =总是去随机访问的方式,不管我提出的数字是多少.
所以…对我来说,我会得出答案是:
the advantage of having a simple and well-memorizeable precedence list in which all postfix operators come before any of the prefix operators is sufficient to tolerate the minor drawback of always having to use parentheses to compose pre- and postfix operators
++
/--
,as this composition is used very seldom.
更简单的“C这样做”,虽然这似乎是真正的原因,但对我来说远远不那么令人满意,因为由于x在C中根本不被允许,所以可以重新定义这个非常的构图而不会有损害任何现有的代码.
无论如何,我会继续使用(x) –,因为括号真的不会伤害太多.
解决方法
看看D.M. Ritchie Home Page中有什么可以看到,这个优先级已经存在于B中(一元运算符绑定到左边,所以 – !x是绑定的 – (!(x))在用户的参考B)和我没有在BCPL中看不到增量运算符.