提问人:dreamer 提问时间:7/26/2019 最后编辑:Guillaume Racicotdreamer 更新时间:7/27/2019 访问量:157
在这种情况下,为什么需要取消引用“this”?(赋值运算符)
Why does 'this' need to be dereferenced in this case? (assignment operator)
问:
因此,这是一个示例[摘自Bjarne Stroustrup的“C++之旅(第2版)],其中包含用户定义的向量类的复制分配:
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”是一个指针,因此取消引用它实际上应该为我们提供它指向的当前对象。在需要对所述对象的引用的情况下,如何接受对象作为返回值?
答:
3赞
Vlad from Moscow
7/26/2019
#1
this
是指向所分配对象的指针。该函数返回对对象的引用。因此,您需要取消引用指针以获取对象的左值。
评论
0赞
dreamer
7/26/2019
那么当一个函数的返回类型是X&时,函数的return语句只需要提供一个X类型的对象呢?
2赞
YSC
7/26/2019
@tudorarion C++中没有语法工具,意思是“对变量 X 的引用”。转换是隐式的,没有歧义。
1赞
Lightness Races in Orbit
7/27/2019
换句话说,“是”。
2赞
user10957435
7/26/2019
#2
this
是指针类型。您的函数返回对 .若要将指针转换为左值,需要取消引用它。Vector
评论
2赞
Lightness Races in Orbit
7/26/2019
从技术上讲,取消引用不会为您提供引用类型的表达式;它为您提供一个左值,该左值引用原始值 [hah!],该表达式的类型为 (not )。但无论如何,参考资料都是有趣的老东西......Vector
Vector&
0赞
Lightness Races in Orbit
7/27/2019
你改错了句子:P该函数返回一个,因为这是返回类型。但是你说取消引用指针会产生引用,这是不正确的。(不过这并不重要)Vector&
0赞
7/27/2019
这就是为什么我写“我认为是固定的”之类的东西。这样我就可以确定我理解人们在告诉我什么。好的,这次应该真的修好了。请再次仔细检查,确保我没有再次搞砸。
1赞
Lightness Races in Orbit
7/27/2019
好吧,价值类别并没有完全涵盖取消引用的作用,但足够接近。
0赞
7/27/2019
不,您需要这个问题才能正确地做到这一点:D。无论如何,感谢您的友好反馈。
4赞
Lightness Races in Orbit
7/26/2019
#3
“This”是一个指针,因此取消引用它实际上应该为我们提供它指向的当前对象。
是的。
在需要对所述对象的引用的情况下,如何接受对象作为返回值?
与任何其他引用的方式相同。
int x = 3;
int& ref = x; // just fine
在这种情况下,为什么需要取消引用“this”?(赋值运算符)
需要取消引用指针来获取指针,这与返回引用类型的函数关系不大,只是说如果不取消引用指针,则必须返回指针,因此返回类型必须是 。Vector*
评论