gpt4 book ai didi

C++ 移动赋值运算符返回类型

转载 作者:行者123 更新时间:2023-11-27 22:52:53 25 4
gpt4 key购买 nike

移动赋值运算符的正确返回类型是什么?

const type&

type&

?

为什么? (我不认为我完全理解编译器如何确定 l/r/x 值。)

例如,考虑 vector 类的实现。

一个函数可以返回一个 vector 。

vector myfunc()
{
vector v;
// add content to v
return v;
}

int main()
{
vector v2;
v2 = myfunc;
}

我们希望 myfunc 返回 [?] 一个过期值 [?],即;我们希望调用移动赋值运算符,而不是复制赋值运算符。

复制赋值运算符可能如下所示:

const Vector& operator=(const Vector& vector)
{
if(this != &vector)
{
if(m_capacity_x != vector.m_capacity_x)
{
delete [] m_data;
m_data = new T[vector.m_capacity_x];
}

m_size = vector.m_size_x;
m_capacity_x = vector.m_capacity_x;

std::copy(&(vector.m_data[0]), &(vector.m_data[vector.m_size_x - 1]), m_data);
}

return *this;
}

而移动赋值运算符可能看起来像这样:

Vector& operator=(Vector&& vector)
{
m_data = vector.m_data;
m_size = vector.m_size;
m_capacity = vector.m_capacity;
m_data = nullptr;
m_size = 0;
m_capacity = 0;

return *this;
}

但是返回类型是否正确?应该是 Vector&& [这存在吗?] 还是 const Vector&

最佳答案

我们可以问,分配给右值有什么意义?赋值通常是在左值上完成的,所以这就是你应该返回的。此外,如果您的值最初是 const,为什么它会支持赋值?否则,如果它不是 const,为什么要强制它?

因此,正常情况下赋值运算符总是返回一个非常量左值。

关于C++ 移动赋值运算符返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35815410/

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