如果你有一个返回整数的C函数,你可以写一个这样的语句:
MyInt &= MyFunc();
...我们使用按位AND赋值运算符。
问题是:即使MyInt等于零,MyFunc()仍然可以执行吗?
Likwise,如果我们使用按位OR赋值运算符(| =),即使MyInt设置为全部,也会执行MyFunc()吗?
换句话说:对于按位运算符,C是否允许延迟评估?
答案 0 :(得分:8)
没有。按位运算符不会短路。无论MyFunc()
的值是什么,MyInt
都会得到保证。
答案 1 :(得分:1)
MyInt &= MyFunc();
相当于:
MyInt = MyInt & MyFunc();
该语言指出&操作员没有短路。然而, 如果MyInt,优化器可以生成不调用该函数的代码 为零,确定该功能没有副作用。我怀疑任何编译器都会这样做,因为运行时测试可能会让它变得悲观。