Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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++ 为什么std::reference_包装器显式定义了一个复制赋值操作符?_C++ - Fatal编程技术网

C++ 为什么std::reference_包装器显式定义了一个复制赋值操作符?

C++ 为什么std::reference_包装器显式定义了一个复制赋值操作符?,c++,C++,std::reference_包装器显式声明复制赋值运算符。为什么?这应该可以防止移动构造/分配被隐式定义,所以我的假设是他们不希望您移动std::reference_包装,但我不确定这有什么关系 如果您查看“可能的实现”,它们只是默认的运算符: 只是想了解一下委员会为什么觉得有必要这样做 这将防止隐式定义移动构造/分配 std::reference\u wrapper是一个非所有者引用(实际上是指针),移动操作与复制操作没有什么不同。不要将其与std::shared_ptrstd::refe

std::reference_包装器显式声明复制赋值运算符。为什么?这应该可以防止移动构造/分配被隐式定义,所以我的假设是他们不希望您移动std::reference_包装,但我不确定这有什么关系

如果您查看“可能的实现”,它们只是默认的运算符:

只是想了解一下委员会为什么觉得有必要这样做

这将防止隐式定义移动构造/分配


std::reference\u wrapper
是一个非所有者引用(实际上是指针),移动操作与复制操作没有什么不同。不要将其与
std::shared_ptr

std::reference_包装器
是一个具有类似引用语义的对象。但与内置引用不同的是,
reference\u包装器可以重新绑定、复制和移动。这使得它可以在标准容器中使用。所以我不理解你的困惑,通过它的设计,一个
参考包装应该是可复制和可移动的。

他们声明它是因为它有工作要做

是的,这将禁止自动生成移动构造函数。不,没关系。作者无论如何都必须定义他们自己的(出于同样的原因,他们需要创建一个复制构造函数),除了“移动”不拥有资源的东西是没有用的。它将与副本相同


这并不意味着std::reference_包装器不能移动,它只是意味着“移动”一个包装器与复制它是一样的。两次实现这一点是没有意义的

考虑您希望从
std::reference\u包装器中移动的文件处于什么状态。如果可以帮助,您不希望引用包装器引用不存在的内容

此页面上没有“可能的实现”。这是正确的页面吗?“可能的实现”在这里:问题是为什么它不能移动。虽然你可以使用移动,但它实际上没有移动,因为隐式移动是不可能的。我不是,真的在寻找为什么不添加移动。我猜这是因为reference_包装器只是一个指针,所以移动和复制是一样的。老实说,我认为这也是我能想到的最好的解释。最终,移动将与复制相同,因此不需要添加它。