移動賦值運算符的正確返回類型是什麼?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