C++中i=3时的(++i)+(++i)+(++i)的值为什么等于16呢,为什么不是15?求解...
发布网友
发布时间:2024-10-02 20:48
我来回答
共2个回答
热心网友
时间:2024-10-18 09:49
(++i)+(++i)+(++i)
等价于什么呢
先执行
(++i)+(++i)
然后再从这个值去
+(++i),
所以先是5+5=10,然后10+6
就是16了
---------------
发现哥们你说是15结论有点问题,
(++i)+(++i)
我想了下,按照你的说法,可能你会说是
4+5=9
,对么
其实是
5+5
,同一表达式中,
i变量的值要在最后面算
,上面的(++i)+(++i)+(++i)其实是
2个表达式
----------不明白可以追问
------------------c++部落------------Hello
Word!--------
无论你是初学者还是专家,只要你热爱编程、交流、分享,欢迎加入
热心网友
时间:2024-10-18 09:47
你确定最后的结果是16?
我分析了一下,还是15啊
第一个括号里执行后i=4;
然后第二个括号i=5;
然后执行加法,值是9;
然后执行第三个括号里的,i=6;
最后执行第二个加法,值是15.
////////////////////////////////////////////////////////////////
这样的题目答案不是唯一的,也没有讨论的价值。
百度里搜sequence
point
引用:
Sequence
Point就是这么一个位置,在它之前所有的side
effect已经发生,在它之后的所有side
effect仍未开始,而两个Sequence
Point之间所有的表达式或者代码执行的顺序是未定义的!
而C++标准又进一步规定了Sequence
Point出现的5种情况:
1、
At
the
end
of
a
full
expression
.....
根据1:
int
i
=
3;
int
k
=
(++i)+(++i)+(++i);
两个语句分别是2个sp,(++i)+(++i)+(++i)发生在两个sp之间
所以任何一个(++i)被作为参与计算等式右边表达式的值的顺序是不确定的
举个例子
k
=
(++i);
k
+=
(++i);
k
+=
(++i);
这样的结果是15
或者
++i;
++i;
k
=
i
+
i;
k
+=
++i;
这样的结果是16
也有可能
++i;
++i;
++i;
k
=
i
+
i
+
i;
这样的结果是18