【问题标题】: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 这看起来像是一个答案。

标签: c++ c++11 c++17


【解决方案1】:

emplace 及其同类的整个点 表明对象正在就地构造。不允许实现构建项目并将其复制/移动到其最终位置。

在构造函数中使用in_place的主要原因是因为构造函数必须使用重载解析来告诉您打算调用哪个构造函数(对于anyvariant,它们还指定要构造为模板的对象类型参数,因为您不能在模板参数推导之外向构造函数提供模板参数)。因此,如果你想在构造函数中有类似 push_back/emplace_back 的区别,你必须使用参数,而不是函数名。

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 2018-09-20
    • 2021-06-15
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多