C++为什么atomic_load的参数类型是指针而不是引用?

Cae*_*sar 8 c++ stl language-lawyer c++11

我同意何时使用引用与指针的答案.
但是,我想知道为什么C++将atomic_load定义为

template<class T>
T atomic_load(const std::atomic<T> *obj) noexcept;
                                   ^
Run Code Online (Sandbox Code Playgroud)

代替

template<class T>
T atomic_load(const std::atomic<T> &obj) noexcept;
                                   ^
Run Code Online (Sandbox Code Playgroud)

谁能帮我?

T.C*_*.C. 10

我们拥有这些免费功能模板的原因是与C11的源兼容性:

#ifdef __cplusplus
#include <atomic>
#define _Atomic(X) std::atomic<X>
#else
#include <stdatomic.h>
#endif

_Atomic(int) c;

int get_c(void) { 
    return atomic_load(&c); 
}
Run Code Online (Sandbox Code Playgroud)

C没有参考.

如果你不需要那个,那么c.load()隐式转换T就可以了.忘记自由功能曾经存在过.

(这也是memory_order调用自由函数模板版本的原因atomic_load_explicit:_GenericC中的-powered宏可以处理不同的参数类型,但不会改变arity.)