【发布时间】:2021-07-20 09:34:32
【问题描述】:
我有一个简单的功能:
void foo(atomic<int> a) { }
我可以通过这种方式调用foo():
foo({ });
但我不能这样做:
foo(atomic<int>{ }); 由于出现错误消息 copy constructor is a deleted function。我用 C++14 编译过。
- 第一种方式调用什么构造函数:创建构造函数还是移动构造函数?
- 为什么不调用第二种方式,例如移动构造函数?
-
foo()的这两个调用可以在 C++17 中正常编译 - 为什么?
【问题讨论】:
-
你的编译器是什么?
-
您可以将第二个参数作为
std::move(atomic<int>{ })传递,这应该强制调用移动构造函数。 -
@KarenBaghdasaryan - 没有移动构造函数。用户声明的复制构造函数(甚至是已删除的构造函数)不允许隐式生成移动 c'tor。
标签: c++ c++17 atomic copy-constructor move-constructor