std :: piecewise_construct语法如何工作?

时间:2014-12-01 14:24:51

标签: c++ c++11

std::piecewise_constructstd::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(如图here所示)。

2 个答案:

答案 0 :(得分:8)

std::map::emplace直接调用构造函数,并将参数传递给emplace(转发它们)std::map<std::string, std::string>::value_type类型(这是std::pair<const std::string, std::string>的typedef。)

std::pair has the constructor taking std::piecewise_construct_t (the type of the std::piecewise_construct)

答案 1 :(得分:4)

map::emplace只是将其参数转发给pair<const K, V>的构造函数。 Pair有一个构造函数重载,它将piecewise_construct作为第一个参数。

参见http://en.cppreference.com/w/cpp/utility/pair/pair构造函数#6