2013-01-09 89 views
2

当我在函数中返回指向引用类型的指针时,出现编译器错误initial value of reference to non-const must be an lvalue。该功能是这样返回指向参考的指针

Testing& copy(Testing test) 
{ 
    x = test.x; 
    return this; 
} 

但是,当我改变this*this,该错误消失。

+2

引用不能有指针,但指针*可以*有引用。如果你想返回一个指向你的对象的指针,返回'this'。如果你想返回对象的引用,返回'* this'。 – WhozCraig

+0

你的问题是什么? 'this'是指针,'* this'是一个引用,如果你返回一个引用,你的函数将被编译。毫无疑问。 –

+0

@WhozCraig你能否详细说明,我绝对不会看到你的意思。 –

回答

1

指针和引用不是一回事。 this指针到当前类实例,而*this是作为一个值的实际实例(更具体地说,左值用作返回值)。

3

在C++中,this特殊变量将指针保存到类实例。

您正在创建一个函数,该函数将一个引用返回给一个实例,另一个名称为相同的内存位置。

当您使用*this时,您将取消引用this指针,获取保存当前实例的实际内存位置并返回一个别名。

它确实有效!如果您需要多态性,请谨防Object Slicing Problem

+1

切片仅适用于按值返回/分配。 – Angew