C++ 为什么std::reference_包装器显式定义了一个复制赋值操作符?
std::reference_包装器显式声明复制赋值运算符。为什么?这应该可以防止移动构造/分配被隐式定义,所以我的假设是他们不希望您移动std::reference_包装,但我不确定这有什么关系 如果您查看“可能的实现”,它们只是默认的运算符: 只是想了解一下委员会为什么觉得有必要这样做 这将防止隐式定义移动构造/分配C++ 为什么std::reference_包装器显式定义了一个复制赋值操作符?,c++,C++,std::reference_包装器显式声明复制赋值运算符。为什么?这应该可以防止移动构造/分配被隐式定义,所以我的假设是他们不希望您移动std::reference_包装,但我不确定这有什么关系 如果您查看“可能的实现”,它们只是默认的运算符: 只是想了解一下委员会为什么觉得有必要这样做 这将防止隐式定义移动构造/分配 std::reference\u wrapper是一个非所有者引用(实际上是指针),移动操作与复制操作没有什么不同。不要将其与std::shared_ptrstd::refe
std::reference\u wrapper
是一个非所有者引用(实际上是指针),移动操作与复制操作没有什么不同。不要将其与std::shared_ptr
std::reference_包装器
是一个具有类似引用语义的对象。但与内置引用不同的是,reference\u包装器可以重新绑定、复制和移动。这使得它可以在标准容器中使用。所以我不理解你的困惑,通过它的设计,一个参考包装应该是可复制和可移动的。他们声明它是因为它有工作要做
是的,这将禁止自动生成移动构造函数。不,没关系。作者无论如何都必须定义他们自己的(出于同样的原因,他们需要创建一个复制构造函数),除了“移动”不拥有资源的东西是没有用的。它将与副本相同
这并不意味着std::reference_包装器不能移动,它只是意味着“移动”一个包装器与复制它是一样的。两次实现这一点是没有意义的 考虑您希望从std::reference\u包装器中移动的文件处于什么状态。如果可以帮助,您不希望引用包装器引用不存在的内容此页面上没有“可能的实现”。这是正确的页面吗?“可能的实现”在这里:问题是为什么它不能移动。虽然你可以使用移动,但它实际上没有移动,因为隐式移动是不可能的。我不是,真的在寻找为什么不添加移动。我猜这是因为reference_包装器只是一个指针,所以移动和复制是一样的。老实说,我认为这也是我能想到的最好的解释。最终,移动将与复制相同,因此不需要添加它。