7

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

MyInt &= MyFunc();

...我们使用按位与赋值运算符的地方。

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

同样,如果我们使用按位或赋值运算符 (|=),是否会始终执行 MyFunc(),即使 MyInt 设置为全 1?

换句话说:在 C 中是否允许对位运算符进行惰性求值?

4

2 回答 2

8

不会。按位运算符不会短路。MyFunc()无论MyInt.

于 2009-08-30T15:51:56.327 回答
1
MyInt &= MyFunc();

相当于:

MyInt = MyInt & MyFunc();

该语言声明 & 运算符没有短路。但是,如果 MyInt 为零并且可以确定该函数没有副作用,优化器可以生成不调用该函数的代码。我怀疑任何编译器实际上都会这样做,因为运行时测试可能会使它变得悲观。

于 2009-08-30T15:54:54.073 回答