代码之家  ›  专栏  ›  技术社区  ›  ereOn

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

c c++
  •  23
  • ereOn  · 技术社区  · 14 年前

    , 运算符以及它引入 序列点 .

    i = ++i;
    

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

    但是下面的代码呢?

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

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

    编辑: 正如@paxdiablo提到的, 是否定义 ,这真的是 坏习惯 这应该避免。这个问题的提出仅仅是为了教育目的和更好地理解“规则”。

    2 回复  |  直到 14 年前
        1
  •  27
  •   Oliver Charlesworth    14 年前

    对。 = 优先级高于 , ,所以这个表达式相当于 (i = 0), ++i . , ++i 在分配之后发生。

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

        2
  •  7
  •   Community CDub    7 年前
    i = 0, ++i;
    

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

    i = (0, ++i);
    

    在这种情况下,行为是未定义的,因为在 ++i

    i = (0, ++i, 0)
    

    行为很明确 1个 在C++ 03中,imHO。

    1个 extended discussion 类似的表达。