是否有& =和| =的定义评估顺序?

时间:2009-08-30 15:49:12

标签: c variable-assignment

如果你有一个返回整数的C函数,你可以写一个这样的语句:

MyInt &= MyFunc();

...我们使用按位AND赋值运算符。

问题是:即使MyInt等于零,MyFunc()仍然可以执行吗?

Likwise,如果我们使用按位OR赋值运算符(| =),即使MyInt设置为全部,也会执行MyFunc()吗?

换句话说:对于按位运算符,C是否允许延迟评估?

2 个答案:

答案 0 :(得分:8)

没有。按位运算符不会短路。无论MyFunc()的值是什么,MyInt都会得到保证。

答案 1 :(得分:1)

MyInt &= MyFunc();

相当于:

MyInt = MyInt & MyFunc();

该语言指出&操作员没有短路。然而, 如果MyInt,优化器可以生成不调用该函数的代码 为零,确定该功能没有副作用。我怀疑任何编译器都会这样做,因为运行时测试可能会让它变得悲观。