i = ++ i和++ i之间的区别

可能重复:
谁能解释这些未定义的行为(i = i ++ + ++ i,i = i ++等…)

i = ++i;之间有什么区别i = ++i;++i; 其中i是值为10的整数?

根据我的说法,在完成两个表达式i =11之后,两者都做同样的增量工作。

i = ++i; 调用未定义的行为而++i; 才不是。

C ++ 03 [第5/4节]说Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression

i = ++i i被修改两次[pre-increment and assignment],没有任何插入序列点,因此行为在C和C ++中都是Undefined。

但是i = ++i在C ++ 0x中定义得很好:)

i = ++i; 写入变量i两次(一个用于增量,一个用于赋值),两者之间没有序列点 。 这样,根据C语言标准会导致未定义的行为。

这意味着编译器可以自由地实现i = ++ii = i + 1相同,因为i = i + 2 (这在某些管道和缓存相关的情况下实际上是有意义的),或者format C:\ (愚蠢,但技术上允许标准)。

i = ++我会经常(但不一定)给出结果

我= i;

我+1;

这给了i = 10

正如评论所指出的,这是未定义的行为,永远不应该依赖

而++我将永远给予

i = i + 1;

给出i = 11;

因此,这是正确的做法

如果我是标量类型,则i = ++i是UB,而++i等于i+=1 。 如果我是类类型并且有一个运算符++重载该类,那么i = ++i相当于i.operator=(operator++(i)) ,这是非UB,而++i只是执行++ operator ,无论你放入哪种语义。

第一个结果是未定义的。

这些表达式与序列点相关,最重要的是,第一个表达式导致未定义的行为 。