原子:即使条件为假,也输入了 if 语句

Atomic: if statement is entered even though the conditional is false

编辑:最小可重现示例

#include <atomic>
int main()
{
    std::atomic_uint atomic_write_position{ 0 };
    unsigned write_position = atomic_write_position.fetch_add(1);
    bool b = false;
    b = atomic_write_position.compare_exchange_weak(write_position, 0);
    if (b);
    {
        auto x = 0;
    }
}

在此示例中,compare_exchange_weak 应该会失败,因为 atomic_write_position=1write_position=0 并且确实会正确返回 false 并用 [=15] 的值覆盖 write_position =].但是之后的 if 语句行为不正确,即使 b 为 false 也会输入。

我正在使用 visual studio 16.9.2

您的评论说 'if b is false' 但您的测试是正确的。

if (b) //b is false

改为:

if (!b) //b is false

Remove the semi-colon ; in the if-statement