我发现这可能会在问题Must I call atomic load/store explicitly?中得到解答。
因此,为了清楚起见,我将简洁地重申我的问题,希望未来的读者能够清楚地看到这一点。
是
std::atomic<bool> b(false);
bool x = b;
与
相同std::atomic<bool> b(false);
bool x = b.load();
并且
std::atomic<bool> b(false);
b = true;
与
相同std::atomic<bool> b(false);
b.store(true);
注意我已经意识到这两个变量都不能是std :: atomic,即LHS和RHS,因为在一条指令中不可能原子地读写。
答案 0 :(得分:5)
是的,它们是一样的。我认为提供重载运算符的原因是为了方便起见。更不用说将现有代码转换为使用原子更容易了。
就个人而言,我希望始终明确load
和store
。我认为这是更好的练习并迫使你记住你正在处理一个原子。
此外,这些函数允许您指定其他内存顺序,这对于重载的运算符版本是不可能的。