原子对象是否支持值初始化?即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
相关产品推荐
相关产品推荐

