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

是x+> 0和&数组[x]在C++中定义良好的行为吗?

  •  11
  • knittl  · 技术社区  · 14 年前

    我能用一下吗 x 在布尔表达式的两边,当我在左边增加它时?

    问题是:

     if(x-- > 0 && array[x]) { /* … use x … */ }
    

    这是通过标准来定义的吗?数组[x]是否将使用 还是旧的那个?

    2 回复  |  直到 8 年前
        1
  •  13
  •   Steve Jessop    14 年前

    这要看情况。

    如果 && 是通常的短路逻辑运算符,那就好了,因为有一个序列点。 array[x] 将使用新值。

    如果 && 是用户(或库)定义的重载运算符,则不存在短路,也不保证序列点之间的求值 x-- 数组[x] . 考虑到您的代码,这看起来不太可能,但是没有上下文,就不可能肯定地说。我认为这是可能的,仔细定义 array ,这样安排。

    这就是为什么超载几乎总是个坏主意 operator&& .

    if ((x > 0) && array[--x]) 有一个非常相似的效果(同样,假设没有操作员超载的恶作剧),在我看来更清楚。区别在于是否 x 在0之后递减,这可能是您所依赖的,也可能不是您所依赖的。

        2
  •  11
  •   Peter Mortensen Pieter Jan Bonestroo    8 年前

    是的,它的定义很明确。 && 引入序列点。