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

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

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

 i = ++i; 

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

但是下面的代码怎么样?

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

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

编辑:就像@paxdiablo提到, 定义与否 ,这是一个应该避免的不好的做法 。 这个问题仅用于教育目的和更好地理解“规则”。

是。 =具有比,更高的优先级,因此该表达式等效于(i = 0), ++i,是一个序列点,因此保证++i在赋值后发生。

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

 i = 0, ++i; 

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

 i = (0, ++i); 

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

 i = (0, ++i, 0) 

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

1参见类似表达式的扩展讨论 。