0

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

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

现在,这个函数的返回类型是一个复杂类型的引用。所以我不应该通过this而不是*this

4

2 回答 2

5

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

使用星号取消引用它。

于 2013-02-14T11:13:49.437 回答
0

与 Java 和 C# 不同,this在 C++ 中不是引用,而是指针。该指针是 typeComplex*Complex const*,取决于方法上的 const 限定符(因此Complex*在您的情况下)。

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

从语法上讲,所有三种语言的引用都被视为相同,即它们不需要被取消引用或被隐式取消引用,或者简单地说,您可以像访问它后面的对象一样ref.method()

从语义上讲,普通 Java 和 C# 引用的行为类似于 C++ 指针,即它们可以为 null,并且可以重新分配以指向另一个对象。在 C++ 中,引用都不可能。因此,乍一看,thisJava 和 C# 中的 C++ 指针语义与 C++ 中的一样。但是由于它不能null也不能重新分配以指向另一个对象,因此语义差异消失了,并且在所有三种语言中都具有相同的 C++ 引用语义。

因此,换句话说,相同的答案: 虽然this具有引用语义,但它在 C++ 中的语法上是一个指针,因此您必须显式取消引用它以获得(语法)引用。

于 2013-02-14T11:16:29.737 回答