是i = 0,++我定义了吗?

时间:2010-10-18 12:00:47

标签: c++ c

我最近了解了,运算符以及它引入序列点的事实。

我还了解到以下代码导致了未定义的行为:

i = ++i;

因为i在两个序列点之间被修改了两次。

但是下面的代码呢?

i = 0, ++i;
i = (0, ++i);

虽然我知道规则,但我无法得出结论。它是否定义了行为?

编辑正如@paxdiablo提到,已定义或未,这实际上是一种不良做法,应避免使用。这个问题仅用于教育目的和更好地理解“规则”。

2 个答案:

答案 0 :(得分:27)

是。 =的优先级高于,,因此此表达式等同于(i = 0), ++i,是一个序列点,因此保证在分配后发生++i

我不确定是否定义了i = (0, ++i)。我的猜测是否定的;增量和赋值之间没有序列点。

答案 1 :(得分:7)

i = 0, ++i;

正如另一个答案指出的那样,它不是未定义的行为。

i = (0, ++i);

在这种情况下,行为是未定义的,因为++i和i之间没有序列点。

i = (0, ++i, 0)

行为在C ++ 03,恕我直言中明确定义 1

1 有关类似的表达,请参阅extended discussion