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

原子对象是否支持值初始化?即std::atomic<T> a{}能否实现零初始化

关于std::atomic<T>零初始化的实践与疑问

这里提到的“生效”,指的是std::atomic<T> a{}可以有效对a执行零初始化。我一直抱着这个认知写代码,不过最近却对这个点产生了疑问。

先说说实际编译器的表现吧——至少GCC和Clang在实际编译运行中是按照“零初始化生效”来处理的,比如这段测试代码:

#include <cstring>
#include <atomic>
#include <iostream>
int main() { 
  using atomic = std::atomic<int>; 
  // 先分配内存并填满-1,确保初始状态非零
  auto p = (atomic*)operator new(sizeof(atomic)); 
  std::memset(p, -1, sizeof(atomic));
  // 用空列表初始化atomic对象
  new(p) atomic{};
  // 输出验证零初始化结果
  std::cout << p->load() << std::endl;
  // 清理资源
  p->~atomic();
  operator delete(p);
  return 0;
}

在GCC和Clang环境下运行这段代码,输出结果确实是0,说明空列表初始化确实将std::atomic<int>的底层值置为零了。但我现在的疑问是:C++标准里是否明确规定了std::atomic<T> a{}会执行零初始化?毕竟实践中编译器的行为可能和标准规定存在偏差,这也是我纠结的核心点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:05