原子:即使条件为假,也输入了 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=1
、write_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
编辑:最小可重现示例
#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=1
、write_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