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.)