原子的类内初始化
in-class initialization of atomic
为什么在这个例子中
struct Foo {
atomic<int> x = 1;
};
编译器(GCC 4.8(正在尝试使用已删除的atomic& operator=(const atomic&)
(因此该示例无法编译(,而此处
struct Bar {
Bar() { x = 1; }
atomic<int> x;
};
它按预期调用int operator=(int)
?
PS:我已经知道了
struct Xoo {
atomic<int> x{1};
};
很好(无论如何,初始化x
的更好方法(,但我仍然很好奇为什么Foo
被破坏了。
PS:我误读了编译器错误(并且忘记将其包含在查询中(。它实际上说:
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
std::atomic<int> x = 1;
^
[...] error: declared here
atomic(const atomic&) = delete;
^
所以我上面的陈述"...试图使用atomic& operator=(const atomic&)
是完全错误的。
>std::atomic<int> x = 1;
是复制初始化,基本上是这样做的:
std::atomic<int> x{std::atomic<int>{1}};
你的编译器实际上并不抱怨operator=
,而是抱怨复制构造函数。
(正如您所指出的,稍后的operator=
调用工作正常。
执行正常初始化:
std::atomic<int> x{1};
atomic<int> x = 1; // not an assignment.
是
atomic<int> x{atomic<int>{1}};
而
atomic<int> x;
x = 1; // assignment
相关文章:
- 在未初始化映射的情况下,将值插入到映射的映射中
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 分段错误 - 读取初始化指针的数组
- 如何初始化矢量的模板化子类
- C++模板函数中的初始化 - 新的初始值设定项表达式列表被视为复合表达式
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 正在复制具有未初始化成员的结构
- 内存清理程序报告全局对象构造中未初始化值的使用
- 用向量的向量元素初始化向量的空向量
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 初始化指针的常量向量
- 在C++中全局初始化类的正确方法
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 初始化空的 2D 矢量?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 我们可以用参数化构造函数初始化结构的数组吗?
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 初始化类的两种方法?
- 初始化原子指针是原子的吗?如果初始化或内存分配引发,会发生什么情况?