当函数的返回类型为引用(C++)时,返回此指针



这里有一个非常相似的问题,但我不理解以下内容:

想象一下,我有一个二维数学向量的类,我想定义setter函数:

/** Setters **/
Vector2D& setX(double xcoor) {x = xcoor; return *this;}
Vector2D& setY(double ycoor) {y = ycoor; return *this;}

现在;这个";指针包含为其调用函数的实例的地址。

Vector2D VV(2,4);
VV.setX(1).setY(5);

在这种情况下;这个";具有VV实例的地址。那么,为什么不直接返回这个,而是返回这个呢?

在这种情况下"这个";具有VV实例的地址。

右。

为什么不直接返回this,而是返回*this?

假设setX将返回指针

Vector2D* setX(double xcoor) {x = xcoor; return this;}
//^--- no reference but pointer        ---^

那么你的代码就错了:

Vector2D VV(2,4);
VV.setX(1).setY(5);
//    ^ ---------  error object has no class type, you cannot use .

";正确的";将是CCD_ 2。但是,没有理由使用指针。我知道这对初学者来说可能很难理解,因为在教学中指针被过度使用了。大多数时候,您不关心对象的指针或内存地址。

您返回*this,因为这就是启用链接所需的全部内容。调用者有一个VV对象,所以您返回的是对该对象的引用,而不是其他对象。

最新更新