c – 为什么postfix操作符的优先级高于前缀操作符?
这样定义,我们既可以既不是x也不是x–.但另一方面,(x)和(x)都是有用的表达式:(x)将x增加2并返回值“中间”,而(x) – 基本上等于x 1,完全避免必须调用运算符,这有时可能非常有用.
那么为什么优先级没有定义为将x自动扩展为(x)而不是(x)?对于后者我有什么隐含的意义,我不明白,还是只是为了保持一个简单的列表,所有前缀运算符组成一个单一的级别? 编辑好的,我没有明确说出来,但是我当然意味着x是用户定义的类型.对于内置类型,(x = 2)-1当然比(x)好,x 1比(x) – 好多了.我想到的情况是对一个相当复杂类型的半关联容器的迭代器,其中运算符=和(被设计为随机访问)必须重建缓存以便有效地工作以用于一般请求,因此是数量级比.但是,当然,我可以修改它们,以便始终检查参数是否是一个非常小的整数,在这种情况下,只需重复调用运算符,而不是执行随机访问过程.这应该可以在这里工作,虽然我可以想象我可能在某种程度上有一种情况,我希望operator =总是去随机访问的方式,不管我提出的数字是多少. 所以…对我来说,我会得出答案是:
更简单的“C这样做”,虽然这似乎是真正的原因,但对我来说远远不那么令人满意,因为由于x在C中根本不被允许,所以可以重新定义这个非常的构图而不会有损害任何现有的代码. 无论如何,我会继续使用(x) –,因为括号真的不会伤害太多. 解决方法
C标准只是保留了C规则,显然那些没有修复,考虑到运算符超载和成语尚未被发明为一种尚未被发明的语言.
看看D.M. Ritchie Home Page中有什么可以看到,这个优先级已经存在于B中(一元运算符绑定到左边,所以 – !x是绑定的 – (!(x))在用户的参考B)和我没有在BCPL中看不到增量运算符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |