代码之家  ›  专栏  ›  技术社区  ›  Chris Beck

为什么在C++ 17中被弃用,并在C++ 20中被删除?

  •  1
  • Chris Beck  · 技术社区  · 6 年前

    因为C++ 11, std::reference_wrapper 是一个小的“填充”模板,它是一个类类型,可以从引用类型构造并转换为引用类型。它可以用于可能不支持引用的通用容器中。

    https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper

    STD::RealthyTyWrPrPar是一个类模板,它封装可复制的可分配对象中的引用。它经常被用作存储标准容器内的引用的机制(如STD::向量),它通常不能保存引用。

    此标准库特征在C++ 17中被弃用,并在C++ 20的当前草稿中被删除。为什么?

    STD:参考文献包装 使用不安全或有缺陷?

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r3.html#2.0 这似乎是“D.8旧的可适应函数绑定”的一部分,并且描述标准中的文本 STD:参考文献包装 在“D.9.2 typedefs to support function binders[depr.func.adapter.typedefs]一节中划掉。

    看起来我们删除它是因为它在旧的函数绑定器API中扮演了一个角色,但实际上它在容器中有其他用途,如参考页中所述。是否有一些我丢失的东西替换了那个用例,或者其他一些我错过的关于这种情况的东西?

    如果这个有用的特性被删除了,我们应该在需要的时候实现它,还是有一些原因导致整个模式不安全?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Rakete1111    6 年前

    此标准库特征在C++ 17中被弃用,并在C++ 20的当前草稿中被删除。

    它没有被否决,也没有被删除。事实上,你可以在下面找到它 [refwrap] 在最新的草案中。

    啊,你误解了删除的措辞。“旧的适应性函数绑定”在[refwrap](和其他)下,但它们被弃用,因此它们被移到了附录D中。这意味着 std::reference_wrapper 分裂了!

    你可以从链接纸的d9.2p2中看到这一点。上面写着:

    定义了以下成员名称 此外 第23.14条规定的名称:

    那些粘合剂是 额外的 成员。它们的移除对规范的其他部分没有影响 reference_wrapper .