考虑这段代码,其中x
和y
是整数:
if (x)
y = 42;
是否允许以下编译器转换?
int tmp = y;
y = 42;
if (!x)
y = tmp;
上下文:
这是来自 Bjarne Stroustrup 的常见问题解答:
// start with x==0 and y==0
if (x) y = 1; // Thread 1
if (y) x = 1; // Thread 2
常见问题解答指出这是免费的数据竞赛;和x
两者y
都为 0,则不应写入任何变量。
但是如果允许转换呢?