Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么c+中不推荐使用'std::reference_wrapper'+;17并在c+中移除+;20?_C++_C++11_C++17_C++20_Reference Wrapper - Fatal编程技术网

C++ 为什么c+中不推荐使用'std::reference_wrapper'+;17并在c+中移除+;20?

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是否使用不安全或存

由于C++11,
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如果你有这个误解,那么其他人也会有这种误解也不是不可能的。保留它可能是合适的。