代码之家  ›  专栏  ›  技术社区  ›  Steve Melnikoff

是否为&=和|=定义了评估顺序?

  •  7
  • Steve Melnikoff  · 技术社区  · 15 年前

    如果有一个返回整数的C函数,可以编写如下语句:

    MyInt &= MyFunc();
    

    …我们使用的是按位AND赋值运算符。

    问题是:即使MyInt等于零,MyFunc()是否保证执行?

    类似地,如果我们使用按位或赋值运算符(|=),MyFunc()是否会始终执行,即使MyInt被设置为所有值?

    换句话说:C中允许对位运算符进行惰性计算吗?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Mehrdad Afshari    15 年前

    否。按位运算符不会短路。 MyFunc() MyInt

        2
  •  1
  •   anon anon    15 年前
    MyInt &= MyFunc();
    

    相当于:

    MyInt = MyInt & MyFunc();
    

    该语言指出,;操作员没有短路。然而 如果MyInt,则优化程序可以生成不调用函数的代码 为零,并且可以确定该功能没有副作用。我怀疑是否有编译器会这么做,因为运行时测试可能会让人感到悲观。