c++ - std::atomic 的默认值是多少?

标签 c++ c++11 initialization c++14 atomic

我发现在实践中,对于各种 C++11/C++14 编译器,std::atomic 有一个未定义的初始值,就像它是一个 "生”类型。也就是说,我们期望对于表达式

int a;

a 可以有任何值。对于表达式

std::atomic< int > b;

b 也可以有任何值。换句话说,

std::atomic< int > b;         // b is undefined

不等于

std::atomic< int > b{ 0 };    // b == 0

或到

std::atomic< int > b{};       // b == 0

因为在后两种情况下,b 被初始化为一个已知值。

我的问题很简单:在 C++11 或 C++14 规范中的什么地方记录了这种行为?

最佳答案

[atomics.types.generic]/5 关于积分特化是这样说的:

The atomic integral specializations and the specialization atomic shall have standard layout. They shall each have a trivial default constructor and a trivial destructor. They shall each support aggregate initialization syntax.

此外,同一节开头的主要模板概要规范地将默认构造函数指定为:

atomic() noexcept = default;

效果在 [atomic.types.operations]/4 中定义为:

Effects: leaves the atomic object in an uninitialized state.

关于c++ - std::atomic 的默认值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320008/

相关文章:

ios - 如何定义 CKRecord 类

c++ - 帮助配置log4cplus配置文件(properties文件)

c++ - 在 map 中找到第 N 个最常出现的键

c++ - 如何为采用一个参数的类初始化 shared_ptr vector ?

c++ - 在 C++ 中对大量元素进行分组的最快方法

c++需要清晰的示例来显示 decltype(x) 和 decltype((x)) 之间的区别

c++ - C++ 11 mersenne_twister_engine 类的问题

c++ - 使用 "got there first"标志而不是锁/互斥来同步对数据的访问

python - 在类初始化时使用数组中的变量定义函数

c++ - C++ 和 C 中的 union 初始化