gpt4 book ai didi

c++ - C++(C?)中变量的多个预增量操作

转载 作者:IT老高 更新时间:2023-10-28 22:08:13 26 4
gpt4 key购买 nike

为什么下面的代码会在 C++ 中编译?

int phew = 53;
++++++++++phew ;

相同的代码在 C 中失败,为什么?

最佳答案

注意:两个缺陷报告DR#637DR#222理解以下行为原理很重要。


为了解释,在 C++0x 中有 value 计算side effects。例如,副作用是赋值,而值计算正在确定左值所指的内容或从左值中读取值。请注意,C++0x 不再有序列点,并且这些内容的措辞是“sequenced before”/“sequenced after”。并且据说

If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.

++v 等价于 v += 1 等价于 v = v + 1 (除了 v 只计算一次)。这产生了 ++ (v = v + 1),我将其写为 inc = inc + 1,其中 inc 指的是左值v = v + 1 的结果。

在 C++0x 中,++++v 不是未定义的行为,因为对于 a = b,赋值是在 b 和 a 的值计算之后排序的,但在赋值表达式的值计算。由此可见,v = v + 1 中的赋值是在inc 的值计算之前排序的。 inc = inc + 1 中的赋值是在 inc 的值计算之后排序的。最后,这两个分配将因此被排序,并且没有未定义的行为。

关于c++ - C++(C?)中变量的多个预增量操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3690141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com