在这种情况下,为什么需要取消引用“this”?(赋值运算符)

Why does 'this' need to be dereferenced in this case? (assignment operator)

提问人:dreamer 提问时间:7/26/2019 最后编辑:Guillaume Racicotdreamer 更新时间:7/27/2019 访问量:157

问:

因此,这是一个示例[摘自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”是一个指针,因此取消引用它实际上应该为我们提供它指向的当前对象。在需要对所述对象的引用的情况下,如何接受对象作为返回值?

C++ 赋值运算符

评论


答:

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 )。但无论如何,参考资料都是有趣的老东西......VectorVector&
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*