栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对于i = 0,为什么(i + = i ++)等于0?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对于i = 0,为什么(i + = i ++)等于0?

这个:

int i = 0;i += i++

可以在您做的时候看到(以下是过于简化的情况):

int i = 0;i = i + i; // i=0 because the ++ is a postfix operator and hasn't been executedi + 1; // Note that you are discarding the calculation result

实际发生的事情比这还涉及更多-看一下MSDN,7.5.9 Postfix递增和递减运算符:

x ++或x–形式的后缀递增或递减操作的运行时处理包括以下步骤:

  • 如果x被分类为变量:

    • 计算x以产生变量。
    • x的值被保存。
    • 使用保存的x值作为参数调用选定的运算符。
    • 操作员返回的值存储在x的求值给出的位置。
    • x的保存值成为运算结果。

请注意,由于优先顺序的原因,后缀

++
发生 在之前
+=
,但是结果最终未使用(因为使用了的先前值
i
)。


更透彻的分解,

i +=i++
它是由零件都需要一个人知道这两个
+=
++
不是原子(即,没有一个是单人操作),即使它们看起来像他们。这些实现的方式涉及临时变量,
i
即操作发生之前的副本-
每个操作一个。(我将使用的名称
iAdd
iAssign
所使用的临时变量
++
+=
分别)。

因此,更接近发生的事情是:

int i = 0;int iAdd = i; // Copy of the current value of i, for ++int iAssign = i; // Copy of the current value of i, for +=i = i + 1; // i++ - Happens before += due to order of precedencei = iAdd + iAssign;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447133.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号