C++ 为什么c+中不推荐使用'std::reference_wrapper'+;17并在c+中移除+;20?
由于C++11,C++ 为什么c+中不推荐使用'std::reference_wrapper'+;17并在c+中移除+;20?,c++,c++11,c++17,c++20,reference-wrapper,C++,C++11,C++17,C++20,Reference Wrapper,由于C++11,std::reference_wrapper是一个小的“垫片”模板,它是一个类类型,可以从引用类型构造并转换为引用类型。它可以在可能不支持引用的通用容器中使用 reference_wrapper是一个类模板,它将引用封装在可复制、可分配的对象中。它经常被用作在标准容器(如std::vector)中存储引用的机制,而标准容器通常无法保存引用 此标准库功能在C++17中被弃用,并在当前的C++20草案中被删除。为什么? std::reference_wrapper是否使用不安全或存
std::reference_wrapper
是一个小的“垫片”模板,它是一个类类型,可以从引用类型构造并转换为引用类型。它可以在可能不支持引用的通用容器中使用
reference_wrapper是一个类模板,它将引用封装在可复制、可分配的对象中。它经常被用作在标准容器(如std::vector)中存储引用的机制,而标准容器通常无法保存引用
此标准库功能在C++17中被弃用,并在当前的C++20草案中被删除。为什么?
std::reference_wrapper
是否使用不安全或存在某种缺陷
在
这似乎是“D.8旧的适应性函数绑定”的一部分,标准中描述std::reference_wrapper
的文本在“D.9.2 Typedefs以支持函数绑定[depr.func.Adapter.Typedefs]”一节中被划掉
我们删除它似乎是因为它在旧的函数绑定器API中扮演了一个角色,但它实际上在容器中有额外的用途,如参考页所述。是否有我遗漏的替代那个用例的东西,或者关于这种情况我遗漏的其他东西
如果这个有用的特性被删除了,我们应该在需要的时候实现它吗,还是说整个模式是不安全的
此标准库功能在C++17中被弃用,并在当前的C++20草案中被删除
它没有被弃用,也没有被删除。事实上,你可以在最新的草稿中找到它
啊,你误解了被删除的措辞。“旧的适应性函数绑定”在[refwrap](和其他)下,但它们已被弃用,因此被移至附录D。这意味着std::reference_wrapper
的规范被拆分
您可以从链接文件的D9.2p2中看到这一点。它说:
除第23.14条规定的名称外,还定义了以下成员名称:
这些活页夹是额外的成员。它们的删除不会影响
reference\u wrapper
规范的其他部分唯一被弃用和删除的是成员typedefs。谢谢,因为这个问题是一个简单的误解,你认为我应该关闭它、删除它还是留下它?@ChrisBeck如果你有这个误解,那么其他人也会有这种误解也不是不可能的。保留它可能是合适的。