java每次执行自增1,Java-自增操作符的一个疑问

关于递增操作符(++)的一些讨论

在讨论递增操作符之前先说明几个概念,之后会用到。

1、顺序点:程序执行过程中的一个点。在这里,进入下一步之前将确保对所有的副作用都进行了评估。在C++中,语句中的分号就是一个顺序点,这意味着程序处理下一句语句之前,赋值操作符、递增操作符和递减操作符等执行的修改都必须完成。另外,任何完整表达式末尾都是一个顺序点。

2、副作用:在计算表达式时对某些东西(如存储在变量中的值)进行了修改,这种现象称为该表达式具有副作用。

3、完整表达式:它是这样一个表达式,不是另一个更大表达式的子表达式。完整表达式的例子有:表达式语句中的表达式部分以及用作while循环中的检测条件的表达式。

下面正式讨论一下递增操作符:

1、递增操作符有两个版本:前缀版本和后缀版本。

2、前缀递增操作符、前缀递减操作符和解除引用操作符的优先级相同,都以从右往左的方式进行结合。后缀递增操作符、后缀递减操作符的优先级相同,但比前缀版本的操作符的优先级高,这两个操作符以从左往右的方式进行结合。

3、对于一个语句中各表达式均使用完整表达式时,使用递增操作符的前缀版本和后缀版本,两者的最终效果在数值方面没有任何区别。表达式的值未被使用,因此只存在副作用。但是两者的执行速度可能有细微的差别。对于内置类型和当代编译器而言,这看似不是什么 问题。然而C++允许程序员针对类定义这些操作符。对于后缀版本首先复制一个拷贝,将其加1,然后将复制的拷贝返回。因此,前缀版本的效率比后缀版本的效率要高。

4、在语句

while (guests++ < 10)

cout << guests;

中表达式guests++ < 10 是一条完整表达式,因为它是一个while循环的测试条件,因此该表达式的末尾是一个顺序点。所以,C++确保副作用(将guests加1)在程序进入cout << guests之前完成。然后通过递增操作符后缀版本,可确保将guests同10进行比较后再将其值加1.在语句

y = (4 + x++) + (6 + x++);

中表达式 4 + x++ 不是一个完整表达式。因此,C++不保证x的值在计算子表达式 4 + x++ 后立刻增加1。在这个语句中,整条赋值语句时一个完整表达式,而分号标示了顺序点,因此C++只保证程序执行到下一条语句之前,x的值将被递增两次。C++没有规定是在计算每个子表达式之后将x的值递增,还是在整个表达式计算完毕后才将x的值递增。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值