MAC*_*rha 0 c++ increment decrement
今天,我注意到可以做这样的事情(C++):
int x = 3;
++++x; // Correct!
----x; // Correct, too!
++++++x; // x is now 6
Run Code Online (Sandbox Code Playgroud)
这意味着我们可以将预增量和预减量放在一起.我对吗?我知道这不是一个好的做法,但是,如果我们使用它,或者例如,它的++++x表现是否优于x += 2?
顺便说一下,不可能以这种方式使用后增量和后减量:
int x = 3;
x++++; // Error
x----; // Error
Run Code Online (Sandbox Code Playgroud)
为什么?
我的最后一个问题是,为什么它不适用于C#,Java,JavaScript,PHP甚至C?(注意:我不说Python和Ruby因为它们没有后缀/前缀增量/减量运算符)
提前致谢!
前缀和后缀增量都需要引用要递增的值.
++x 返回对(递增的)x的引用,这就是为什么可以链接前缀增量.
x++但是,Postfix会增加x并返回一个临时值的临时副本 - 而不是引用,因此无法链接.
表现与此无关.++++x并且x+=2是等价的 - 某些编译器可能会为一个或另一个生成更好的代码,但这并不是预期的,即使这样,在大多数执行平台上差异通常也可以忽略不计.
虽然++++x是合法的,但通常会被认为是不好的风格.
至于为什么其他语言不这样做:我不知道一个基本原理,虽然"不帮助程序员编写奇怪的代码"可能是合理的.它也可能只是其他规则的副作用.请注意,例如在C#中,表达式评估规则明显不同,例如,x = x++ + 1;在C和C++中是非定义行为,而在C#中则不是