是i =(0,++ i,0)未定义的行为

时间:2010-10-18 16:43:34

标签: c++ c

我看到几个小时前就问过this问题了。

我的问题与此有关,但略有不同,这是Johannes Schaub-litb对Oli Charlesworth的回答的评论结果。

i = (0, ++i, 0)未定义的行为?

P.S: 这仅用于教育目的,与现实生活中的代码或示例无关。如果您只想添加“为什么关心?没有人在现实世界的应用程序中使用它”这样的评论,请忽略这个问题。等

TIA

3 个答案:

答案 0 :(得分:12)

不,这不是未定义的行为。

此处未定义行为的唯一可能性是i的多重修改,但()内的一个修改与,运算符中固有的序列点隔离。所以,没有未定义的行为。

答案 1 :(得分:2)

我认为在i = (0, ++i, 0)中,由于逗号运算符,i在不同的序列点被修改,因此定义了行为。

答案 2 :(得分:1)

如果定义了i = (++i, 0),那么这也是如此。也许你应该简化这个问题!