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

Is load() called implicitly when using a method from an std::atomic?

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

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

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

两者有区别吗?取消引用运算符的使用是否隐式调用 load() ?

a 调用了 operator int*(),然后将间接运算符应用于指针。转换函数和调用一样load,几乎完全一样

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