移动赋值运算符的正确返回类型是什么?C++移动赋值运算符返回类型
const type&
或
type&
?
为什么? (我不认为我完全理解编译器如何确定l/r/x值。)
例如,考虑向量类的实现。
函数可能会返回一个向量。
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&
?
您的“分配”操作员实际上都格式化硬盘驱动器。请返回*东西*。 – Fanael
@Fanael err,格式化硬盘驱动器? – user3728501
未定义返回非返回值时返回非'void'的函数结束时的行为。 – Fanael