调用 std::atomic_fetch_add,出现“没有匹配函数调用 'atomic_fetch_add'”错误

Calling std::atomic_fetch_add, getting ''No matching function for call to 'atomic_fetch_add' error

我的背景是 Swift 和 Objective-C,所以我对我正在处理的 C++ 文件中的这种行为感到困惑。

首先,这一行:

OSAtomicIncrement32Barrier(&changeCounter);

在 Xcode 中显示警告:

'OSAtomicIncrement32Barrier' is deprecated: first deprecated in iOS 10.0 - Use std::atomic_fetch_add() from <atomic> instead

没有汗水。我导入 <atomic> 并将该行替换为:

std::atomic_fetch_add(&changeCounter, 1);

但现在我得到了一个全面的错误:

No matching function for call to 'atomic_fetch_add'

changeCounter 定义如下:

volatile int32_t changeCounter = 0;

我也试过 volatile int。但是没有变化。

我使用代码完成来获取该函数,据我所知我输入了正确的参数。我可以找到的文档(例如 here)显示 atomic_fetch_add在使用中,我似乎也是这样做的。

知道如何解决这个问题吗?

RichardCritten 让我走上了正确的轨道,但除此之外还需要一些改进。主要解决方案是我将 changeCounter 的定义从

更改为
volatile int32_t changeCounter = 0;

std::atomic<int32_t> changeCounter = {0};

请注意 0 周围的大括号:这是因为 std::atomic<int32_t> 没有复制构造函数,因此仅使用 0 会给出错误

Copying member subobject of type 'std::atomic' (aka 'atomic') invokes deleted constructor

根据回答here,将要分配的值放在花括号中避免使用复制构造函数,从而解决了该问题。