我想知道C++标准库中的
emplace
函数是否使用std::in_place
标签(用于表示应在原地构造包含的对象)。因为emplace
函数是在c++11中引入的,而std::in_place
是在c++17中引入的。emplace
及其类似函数的整个目的都是表明对象正在原地构造中。实现不允许构造该项并将其复制/移动到其最终位置。
in_place
在构造函数中使用的主要原因是因为构造函数必须使用重载分辨率来确定要调用哪个构造函数(对于any
和variant
,它们还会指定要构造的对象类型作为模板参数,因为在模板参数推导之外的构造函数中无法提供模板参数)。因此,如果您想在构造函数中拥有像push_back/emplace_back
这样的区别,必须使用参数而不是函数名称。