我正在构建一个用于处理复杂数字的c ++程序。 我对此代码的行为有疑问:
Complex& Complex::operator=(const Complex& com)
{
Complex::re_=com.re_;
Complex::im_=com.im_;
return *this;
}
现在,此函数的返回类型是Complex类型的引用。所以我不应该通过this
而不是*this
。
答案 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 ++中的指针,因此您必须明确地取消引用它以获得(语法)引用。