这是一个示例(从Bjarne Stroustrup的“ C ++之旅(第二版)中摘录)”中的一个用户定义的矢量类的副本分配:
Vector& Vector::operator=(const Vector& a) // copy assignment
{
double* p = new double[a.sz];
for (int i=0; i!=a.sz; ++i)
p[i] = a.elem[i];
delete[] elem; // delete old elements
elem = p; // here elem is the vector's data holding member array
sz = a.sz;
return *this;
}
'This'是一个指针,因此取消引用它实际上应该为我们提供它所指向的当前对象。在期望引用该对象的情况下,该对象如何作为返回值被接受?
答案 0 :(得分:3)
this
是指向所分配对象的指针。该函数返回对该对象的引用。因此,您需要取消引用指针以获取对象的左值。
答案 1 :(得分:3)
“这”是一个指针,因此取消引用它实际上应该为我们提供它指向的当前对象。
是的
在期望引用该对象的情况下,该对象如何作为返回值被接受?
与其他任何引用一样。
int x = 3;
int& ref = x; // just fine
为什么在这种情况下需要取消引用“ this”? (赋值运算符)
需要取消引用指针以获取pointee的需要,与返回引用类型的函数几乎没有关系,只是说如果没有取消引用该指针,则说明d必须返回指针,因此返回类型必须为Vector*
。
答案 2 :(得分:2)
this
是指针类型。您的函数返回对Vector
的引用。要将指针转换为左值,需要取消引用。