当使用std :: atomic中的方法时,是否隐式调用load()?

时间:2017-05-20 02:01:35

标签: c++ pointers c++14 atomic c++17

我注意到,至少在表面上,最后一行代码似乎是等价的:

std::atomic<int*> a;
a.store(new int{11});
std::cout << *a.load() << "\n";
std::cout << *a << "\n";

似乎可以通过直接调用dereference运算符或通过加载指针然后调用运算符来访问存储在指针上的原子包装器中的值。

这两者有区别吗?是否使用dereference运算符隐式调用load()?

1 个答案:

答案 0 :(得分:2)

a已调用operator int*(),然后将间接运算符应用于指针。转换功能与调用load相同,因此它们几乎相同。

唯一的区别是,如果类型是用户定义的,因为它会消耗您的一个用户定义的隐式转换。