gpt4 book ai didi

c++ - 为什么后缀运算符++的优先级高于前缀运算符++?

转载 作者:可可西里 更新时间:2023-11-01 15:13:00 29 4
gpt4 key购买 nike

这样定义,我们既不能做++x++也不能做++x--。但另一方面,(++x)++(++x)-- 都是有用的表达式:(++x)++ x 增加 2 并返回“中间”的值,而 (++x)-- 本质上等同于 x+1 但完全避免必须调用 operator+,这有时非常有用。

那么为什么没有定义优先级让 ++x++ 自动扩展为 (++x)++ 而不是 ++(x++)?后者是否有一些我不理解的隐藏含义,或者只是为了将优先级保持为一个简单的列表,所有前缀运算符构成一个级别?

编辑 好吧,我没有明确说出来,但是:当然我的意思是 x 是用户定义的类型。对于内置类型,(x+=2)-1当然优于(++x)++,而x+1(++x)--很多。我想到的情况是一个相当复杂类型的半关联容器的迭代器,其中运算符 +=+ (为随机访问而设计)必须重建缓存以便有效地处理一般请求,因此比 ++ 慢一个数量级。但是我当然可以修改它们以始终首先检查参数是否是一个非常小的整数,在这种情况下只需重复调用 operator++ 而不是执行随机访问过程。这在这里应该可以正常工作,尽管我可以想象在某些时候我可能会遇到这样一种情况,即我希望 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)--,因为括号确实没有那么大的伤害。

最佳答案

(++x)++ increments x by two and returns the value "in the middle"

为什么不是 (x += 2) - 1(++x, x++)?两者似乎都更清楚。对于标量,两者在 C++03 中也有明确定义,这与您建议的表达式相反。


(++x)-- is essentially equivalent to x+1 but completely avoids having to call operator+, which can be quite useful sometimes.

这是一个武断的说法,没有任何解释。所以我要扔进游泳池:

x+1 is essentially equivalent to (++x)-- but completely avoids having to call operator++ and operator-- which can be useful sometimes.


So why is the precedence not defined to have ++x++ automatically expand to (++x)++ rather than ++(x++)

只是为了让这些神秘的角落案例不出错?没门。你能为我背诵man operator吗?如果你做不到,最好不要尝试在代码中编写 ++x++

关于c++ - 为什么后缀运算符++的优先级高于前缀运算符++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086643/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com