And*_*rus 5 c++ move-semantics c++11 stdatomic
我正在尝试在包含原子的地图中构造一个对象,因此既不能复制也不能移动AFAICT.
我对C++ 参考的阅读是地图emplace应该能够做到这一点.但是由于已删除或不存在的构造函数,以下代码无法编译.使用make_pair没有帮助.
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果没有,为什么不呢?
编辑:编译器是Linux上的gcc 4.8.1
Yak*_*ont 14
map.emplace(std::piecewise_construct, std::make_tuple(0), std::make_tuple())将Z在位置构造一个零参数0.
map[0] 如果还没有,也会这样做.
emplace采用参数构造一个std::pair<const K, V>. std::pair有一个std::piecewise_construct_t标记的构造函数,它带有两个元组,第一个用于构造第一个参数,第二个用于构造第二个参数.
所以就地std::pair<const int, Z> test( std::piecewise_construct, std::make_tuple(0), std::make_tuple() )构造了tests元素,用const int它构造(0).用Z它构建().
map.emplaceforwards是std::pair构造函数的参数.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |