新emplace_back签名

New emplace_back signature

提问人:Lorah Attkins 提问时间:3/4/2021 最后编辑:eripLorah Attkins 更新时间:3/4/2021 访问量:156

问:

方法的签名已更新为返回引用:emplace_backstd::vector

template< class... Args >
constexpr reference emplace_back( Args&&... args );

虽然我可以找到许多关于为什么不需要这样做甚至糟糕的设计的(旧)帖子,但我找不到有关更改理由的来源。

  • 为什么会发生此更新?如果明显的“提供更易于使用的干扰”成立,为什么没有得到更新呢?push_back
  • 它不会通过使接口复杂化而使异常安全要求复杂化吗?

我也在寻找介绍这一变化的论文,如果你能指出我,将不胜感激。

C++ 语言律师 C++-标准库

评论

6赞 ildjarn 3/4/2021
wg21.link/p0084
3赞 NathanOliver 3/4/2021
关于 它不会通过使接口复杂化而使异常安全要求复杂化吗?如果抛出异常,您将保留将绑定引用的范围,因此那里没有问题。据我所知,它不应该添加任何额外的东西。
2赞 Richard Critten 3/4/2021
push_back推回一个已经存在的对象,其中 as 创建一个新对象,你可能想看看它。如果您可以在推送对象之前观察/修改对象,则无法使用emplace_backpush_backemplace_back
0赞 Richard Critten 3/4/2021
"..为什么push_back没有得到更新?...“,因为它没有被提出(没有必要)。
3赞 Justin 3/4/2021
如何找到论文:我去 wg21.link/index.txt 搜索了“Emplace”。我看到一些东西说,“Emplace Return Type”;这就是论文。

答: 暂无答案