标准库 `emplace` 函数是不是使用 `std::in_place` 标记
Posted
技术标签:
【中文标题】标准库 `emplace` 函数是不是使用 `std::in_place` 标记【英文标题】:Do std library `emplace` functions make use of `std::in_place` tag标准库 `emplace` 函数是否使用 `std::in_place` 标记 【发布时间】:2020-12-26 06:27:59 【问题描述】:我想知道 C++ 标准库 emplace
函数是否使用 std::in_place
标记(表示应就地构造包含的对象)?因为emplace
函数是在c++11中引入的,std::in_place
是在c++17中引入的。
【问题讨论】:
根据documentation,它仅用于变体、可选和任何 @AlanBirtles 这看起来像是一个答案。 【参考方案1】:emplace
及其同类的整个点 表明对象正在就地构造。不允许实现构建项目并将其复制/移动到其最终位置。
在构造函数中使用in_place
的主要原因是因为构造函数必须使用重载解析来告诉您打算调用哪个构造函数(对于any
和variant
,它们还指定要构造为模板的对象类型参数,因为您不能在模板参数推导之外向构造函数提供模板参数)。因此,如果你想在构造函数中有类似 push_back/emplace_back
的区别,你必须使用参数,而不是函数名。
【讨论】:
以上是关于标准库 `emplace` 函数是不是使用 `std::in_place` 标记的主要内容,如果未能解决你的问题,请参考以下文章
STM32CubeMx:是不是可以使用 SPL(标准外设库)配置 ST 控制器
具有显式构造函数的类是不是需要在 emplace 中使用分段构造?
为啥我会使用 push_back 而不是 emplace_back?