STL库的`emplace`函数是否使用了`std::in_place`标签?

3
我想知道C++标准库中的emplace函数是否使用std::in_place标签(用于表示应在原地构造包含的对象)。因为emplace函数是在c++11中引入的,而std::in_place是在c++17中引入的。

根据文档,它只用于 variant、optional 和 any。 - Alan Birtles
@AlanBirtles 那看起来像是一个答案。 - cigien
1个回答

8
emplace及其类似函数的整个目的都是表明对象正在原地构造中。实现不允许构造该项并将其复制/移动到其最终位置。 in_place在构造函数中使用的主要原因是因为构造函数必须使用重载分辨率来确定要调用哪个构造函数(对于anyvariant,它们还会指定要构造的对象类型作为模板参数,因为在模板参数推导之外的构造函数中无法提供模板参数)。因此,如果您想在构造函数中拥有像push_back/emplace_back这样的区别,必须使用参数而不是函数名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接