You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ 对atomic<bool>调用compare_exchange_strong无匹配函数如何解决?

问题原因

std::atomic<T>的compare_exchange_strong成员函数第一个入参要求是T类型的非const左值引用。该函数的工作逻辑为:

  • 若原子变量的当前值等于第一个入参的值,将原子变量修改为第二个入参的值,返回true
  • 若原子变量的当前值不等于第一个入参的值,将第一个入参的值覆盖为原子变量的当前值,返回false

你直接传递字面量false作为第一个参数,字面量属于右值,无法绑定到非const左值引用,因此编译器抛出找不到匹配函数的错误。你之前尝试传入bool*类型参数也不符合函数签名要求,该参数需要的是引用而非指针。

修复方案

提前定义一个本地bool变量存储你要比对的预期值,再将该变量传入compare_exchange_strong即可,参考代码如下:

private:
  std::atomic<bool> resizing_;

void Resize() {
  bool expected = false;
  if (resizing_.compare_exchange_strong(expected, true)) {
    // 此处写入扩容的业务逻辑
  }
}

内容的提问来源于stack exchange,提问作者Gordon Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:15:04