相关疑难解决方法(0)

为什么就地成员初始化在C++ 11中使用复制构造函数?

我对以下代码有点困惑:

struct A {
  std::atomic<int> a = 0;
};
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误:

复制"std :: atomic"类型的成员子对象调用已删除的构造函数

但几乎相同的代码确实有效:

struct A {
  std::atomic<int> a = {0};
};
Run Code Online (Sandbox Code Playgroud)

Okey,如果第一个变体需要复制构造函数,那么它必须使用operator=().可是等等!这个运算符完美地工作,没有复制构造函数:

A a;
a.a = 1;
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释如何在简单操作方面扩展两个就地初始化吗?为什么第一个需要复制构造函数?

c++ initialization atomic copy-constructor c++11

19
推荐指数
2
解决办法
7525
查看次数

标签 统计

atomic ×1

c++ ×1

c++11 ×1

copy-constructor ×1

initialization ×1