我注意到,至少在表面上,最后一行代码似乎是等价的:
std::atomic<int*> a;
a.store(new int{11});
std::cout << *a.load() << "\n";
std::cout << *a << "\n";
似乎可以通过直接调用dereference运算符或通过加载指针然后调用运算符来访问存储在指针上的原子包装器中的值。
这两者有区别吗?是否使用dereference运算符隐式调用load()?
答案 0 :(得分:2)
a
已调用operator int*()
,然后将间接运算符应用于指针。转换功能与调用load
相同,因此它们几乎相同。
唯一的区别是,如果类型是用户定义的,因为它会消耗您的一个用户定义的隐式转换。