指针或参考

时间:2013-02-14 11:10:24

标签: c++ oop reference this

我正在构建一个用于处理复杂数字的c ++程序。 我对此代码的行为有疑问:

Complex& Complex::operator=(const Complex& com)
{
    Complex::re_=com.re_;
    Complex::im_=com.im_;
    return *this;
}

现在,此函数的返回类型是Complex类型的引用。所以我不应该通过this而不是*this

2 个答案:

答案 0 :(得分:5)

this指针是对象实例的地址。

使用星号取消引用它。

答案 1 :(得分:0)

与Java和C#不同,this不是C ++中的引用,它是一个指针。该指针的类型为Complex*Complex const*,具体取决于方法中的const限定符(因此在您的情况下为Complex*)。

编辑如评论中所述,Java和C#的引用并不容易与C ++中的引用和poitner相媲美,所以让我澄清一下:

语法,所有三种语言的引用都被视为相同,即它们不需要被解除引用或隐式取消引用,或者,简单地说,您可以访问它后面的对象,如{{ 1}}。

语义,普通的Java和C#引用就像C ++指针一样,即它们可以为null,可以重新分配它们以指向另一个对象。在C ++中,引用都不可能。乍一看,Java和C#中的ref.method()具有C ++中的C ++指针语义。但由于它不能被this并且不能被重新分配以指向另一个对象,所以这种语义差异消失了,它在所有三种语言中都具有相同的C ++ - 引用语义。

所以,换句话说,同样的答案: 尽管null具有引用语义,但它在语法上是C ++中的指针,因此您必须明确地取消引用它以获得(语法)引用。