我发现在实践中,对于各种 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/