C++中前置增减可连续使用?后置为何不行?性能对比疑问
关于C++中连续前置/后置递增/递减的疑问解答
嘿,你的观察挺有意思!咱们逐个拆解这些问题:
为什么前置递增/递减可以连续使用?
C++里的前置递增运算符++x,返回的是变量自身的左值引用。也就是说,++x执行后,返回的是可被修改的x本身。所以++++x其实等价于++(++x):第一个++x让x加1并返回x的引用,第二个++再作用在这个引用上,再次让x加1。同理,----x就是--(--x),哪怕连续写多个++或--也完全合法,比如++++++x最终会让x增加3。
为什么后置递增/递减不能连续使用?
后置递增x++的逻辑不一样:它会先返回x当前值的临时右值副本,再把x的值加1。那x++++就等价于(x++)++,这里的问题是——第二个++要作用在x++返回的临时右值上,但递增运算符只能操作左值(需要有可修改的内存地址),临时右值是无法被修改的,所以编译器直接报错。后置递减x----也是同样的道理。
连续前置递增的性能比x += 2更好吗?
完全没必要纠结这个!现代编译器的优化能力极强,++++x和x += 2最终生成的机器码几乎完全一致,不存在任何性能差异。甚至单独使用++x和x++时(比如只是单纯递增变量),优化后也不会有区别。
我们应该使用这种连续前置递增的写法吗?
强烈不推荐。编程的核心目标是写出清晰、易读、易维护的代码,这种写法除了炫技没有任何实际价值:
- 可读性极差:别人看到
++++x还要反应半天是加2,而x += 2一眼就能懂 - 容易出错:不小心写成后置就会编译报错,或者数错连续的
++个数 - 不符合通用编码规范:几乎所有团队的编程规范都会禁止这种晦涩的写法
内容的提问来源于stack exchange,提问作者MAChitgarha
相关产品推荐
相关产品推荐

