std :: piecewise_construct语法如何工作?

voi*_*ter 7 c++ c++11

关于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'));
Run Code Online (Sandbox Code Playgroud)

我不emplace()知道在piecewise_construct使用时我怎么知道如何处理这种类型的结构.不应该是:std::piecewise_construct(std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c'))?它是如何只用逗号工作,我没有看到一个重载逗号操作符或特殊的超负荷emplace处理分段,然后可变ARGS(如图所示这里).

mil*_*bug 8

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

std::pair有构造函数std::piecewise_construct_t(的类型std::piecewise_construct)


Dav*_*e S 5

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

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