我有unordered_map
存储<string, A>
对。我想用这个片段安抚配对:
map.emplace(std::piecewise_construct,
std::forward_as_tuple(name),
std::forward_as_tuple(constructorArg1, constructorArg1, constructorArg1));
但是如果我的A
类没有默认构造函数,那么它就无法使用此错误进行编译:
'A :: A':没有合适的默认构造函数
C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ include \ tuple 1180
为什么需要默认构造函数,如何避免使用它?
答案 0 :(得分:2)
std::unordered_map
需要默认构造函数是因为operator[]
。如果map[key]
中不存在key
,map
将使用默认构造函数构造新元素。
您可以完全使用没有默认构造函数的map。例如。以下程序将编译,没有错误。
struct A {
int x;
A(int x) : x(x) {}
};
...
std::unordered_map<int, A> b;
b.emplace(std::piecewise_construct,
std::forward_as_tuple(1),
std::forward_as_tuple(2));
b.at(1).x = 2;