gpt4 book ai didi

c++ - 为什么 `std::reference_wrapper` 在 c++17 中弃用并在 c++20 中删除?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:01 24 4
gpt4 key购买 nike

自 C++11 起,std::reference_wrapper 是一个小型“垫片”模板,它是一种可从引用类型构造并可转换为引用类型的类类型。它可以在可能不支持引用的通用容器中使用。

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

std::reference_wrapper is a class template that wraps a reference in a copyable, assignable object. It is frequently used as a mechanism to store references inside standard containers (like std::vector) which cannot normally hold references.

此标准库功能在 C++17 中已弃用,并在 C++20 的当前草案中删除。为什么?

std::reference_wrapper 使用不安全或有缺陷吗?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r3.html#2.0看起来这部分被认为是“D.8 旧的适应性函数绑定(bind)”的一部分,标准中描述 std::reference_wrapper 的文本在“D.9.2 Typedefs to Support Function Binders”部分被划掉[depr.func.adaptor.typedefs]"

我们删除它似乎是因为它在旧的函数绑定(bind)器 API 中扮演了一个角色,但它实际上在容器中有其他用途,如引用页中所述。是否有我遗漏的东西来代替那个用例,或者我遗漏了关于这种情况的其他东西?

如果删除了这个有用的功能,我们是否应该在需要时实现它,或者是否有某种原因导致整个模式不安全?

最佳答案

This standard library feature was deprecated in C++17 and is removed in the current draft of C++20.

它没有被弃用,也没有被删除。事实上,您可以在 [refwrap] 下找到它在最新的草案中。

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

您可以从链接论文的 D9.2p2 中看到这一点。它说:

The following member names are defined in addition to names specified in Clause 23.14:

那些 Binder 是额外的成员。它们的删除对 reference_wrapper 规范的其他部分没有影响。

关于c++ - 为什么 `std::reference_wrapper` 在 c++17 中弃用并在 c++20 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51738073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com