std::atomic
模板的通用版本有一个声明为
constexpr atomic( T desired );
(参见here)
还有人说bool
,模板的整数和指针特化(引自cppreference)
标准布局,简单的默认构造函数和琐碎的 析构函数。它们支持聚合初始化语法。
这是有道理的,对于只有普通默认ctor和dtor(即没有值ctor)的类,它们有资格作为聚合,因此支持聚合初始化语法。但是,以下代码在GCC和clang上编译良好:
std::atomic_int i(9);
这意味着应该存在值ctor。这违反了标准吗?
引自C ++ 11标准
这些专业应具有标准布局,平凡默认 构造函数和琐碎的析构函数。他们应各自支持 聚合初始化语法。
这并不清楚这些专业化是否应该具有值ctor。
答案 0 :(得分:1)
标准规定了一些typedef,如[atomics.types.generic]:
如表146所示,应有与原子的整数特化相对应的命名类型, 以及与指定的
atomic_bool
对应的命名类型atomic<bool>
。每个命名类型都是atypedef
到相应的专门化或相应专业化的基类。如果是基地 class,它应支持与相应的专业化相同的成员函数。
在表146中,我们看到atomic_int
是atomic<int>
的typedef。 整数特化在与:
template <> struct atomic<integral > {
...
constexpr atomic(integral ) noexcept;
...
};
在int
中替换积分,我们有一个constexpr atomic_int(int )
构造函数。坦率地说,如果无法使用atomic<T>
初始化T
,那就太奇怪了......