STD :: Atomic_fetch为什么将指针作为其输入参数

Why does std::atomic_fetch take a pointer as its input parameter

本文关键字:输入 参数 指针 Atomic fetch 为什么 STD      更新时间:2023-10-16

std::atomic_fetch_xxx 的免费功能集(或,添加,sub,xor(,以输入为 std::atomic<T>*,名为obj:

template< class T >
T atomic_fetch_sub(std::atomic<T>* obj,
                   typename std::atomic<T>::difference_type arg ) noexcept;

问题:为什么STD ::原子类型被视为指针,而不是作为参考(例如:

(传递给
T atomic_fetch_sub(std::atomic<T>& obj,
                   typename std::atomic<T>::difference_type arg ) noexcept;

是否有实用的合理/原因,还是仅仅是风格?

具有的整个想法 免费功能将与C兼容C。反之亦然(。

如果您不希望可以使用成员功能 - 使用到处都有引用 - 例如obj.fetch_sub(arg),甚至使用操作员重载的obj -= arg

,但是代码仅为C 。

为什么std :: atomic_fetch将指针作为输入参数

atomic_fetch_sub需要能够更新第一个参数的值(如果它失败了(,这要求第一个参数通过指针或参考传递。

选择了一个指针使其与C接口兼容。

存在这些免费功能,以便在不更改大多数代码的情况下以C或C 的形式编译。通过取指针,调用免费功能看起来像atomic_fetch_add(var, ...)。这也是atomic_int在C 中存在的原因,尽管它具有与C版本不同的定义。

C11通过使用通用选择宏来实现这种功能超载。C中的atomic_fetch_add不是函数。这是一个宏,可以根据其参数之一选择哪个函数来调用。