当与std::piecewise_construct一起使用时,我对std::map感到有点困惑。示例:
std::map<std::string, std::string> m;
// uses pair's piecewise constructor
m.emplace(std::piecewise_construct,
std::forward_as_tuple("c"),
std::forward_as_tuple(10, 'c'));我不知道emplace()如何知道在使用piecewise_construct时如何以不同的方式处理这种类型的构造。应该是:std::piecewise_construct(std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c'))?它是如何与逗号一起工作的,我没有看到重载的逗号运算符或特殊的过载emplace来处理分段的、然后可变的args (如这里所示)。
发布于 2014-12-01 14:28:30
std::map::emplace直接调用构造函数,并将参数传递给emplace (转发它们)类型为std::map<std::string, std::string>::value_type (这是类型为std::map<std::string, std::string>::value_type的std::map<std::string, std::string>::value_type)。
)
发布于 2014-12-01 14:28:36
map::emplace只是将其参数传递给pair<const K, V>的构造函数。结对有一个构造函数重载,它使用piecewise_construct作为第一个参数。
参见http://en.cppreference.com/w/cpp/utility/pair/pair构造函数#6
https://stackoverflow.com/questions/27230458
复制相似问题