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

为什么使用静态atomic变量编译提示'use of deleted function'错误?

错误原因

std::atomic类型的拷贝构造函数被显式删除,你使用的atomic<bool> TestClass::test3 = false;属于拷贝初始化语法:

  • C++17之前,拷贝初始化要求先从右值false构造一个临时std::atomic<bool>对象,再调用被删除的拷贝构造函数初始化静态成员,因此触发编译报错。
  • 你代码中另外两个整型atomic成员没有触发报错属于编译器实现差异,按照C标准,所有atomic类型的拷贝初始化在C17之前都不符合语法要求。
    另外注意你当前代码中所有atomic都缺少std::命名空间前缀,如果你没有在代码中添加using namespace std;或者using std::atomic;的声明,这也是潜在的编译错误点。
解决方案

有两种可行的修正方案:

  • 方案一:改用直接初始化语法,完全避免拷贝构造的调用检查,兼容性最好,支持C++11及以上所有标准:
// 括号初始化写法
std::atomic<bool> TestClass::test3(false);
// 或者列表初始化写法
std::atomic<bool> TestClass::test3{false};
  • 方案二:如果你的编译环境支持C17及以上标准,可以在CMake配置中添加C17标准的声明,强制复制消除会直接跳过拷贝构造的调用,原有写法也可以正常编译:
# 在CMakeLists.txt中添加以下配置
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:09