C++语法/寻址成员函数



我偶然发现了这段让我很困惑的代码:

SomeObject->SomeFunction()->AnotherFunction(...);

调用SomeFunction()成员函数后的第二个箭头->的含义是什么?

p.S.SomeFunction()函数在类内声明,如下所示:

const int * SomeFunction() {return ipValue;}

SomeFunction()返回一个指针,指向调用了其中一个方法(称为AnotherFunction)的类。如果你把它分解,它可能看起来像这样:

Object* obj = SomeObject->SomeFunction();
obj->AnotherFunction();

如前所述,如果SomeFunction()返回一个int*,这将不起作用。

这是一个编译错误。

int是一个基本类型,而不是一个类,所以不能在它上调用方法

这种技术被称为方法链接。如果成员函数返回对象或指向对象的指针,则可以调用后续方法。在您的情况下,它不会编译,因为该方法返回一个int。然而,类似以下内容会起作用:

class A
{
public:
   A* foo();
   A* goo();
};
A* a = new A;
a->foo()->goo()->foo();

这意味着,方法SomeFunction()返回某种指针或类似指针的对象,然后在其上调用AnotherFunction()

这意味着->运算符具有完全相同的含义,无论它出现在表达式中的哪个位置。

编辑

由于返回类型是int(在编辑之前),因此代码不会按照给定的方式编译。正如您在这里看到的,编译器抱怨->的操作数不是指针。如果您将返回类型更改为int *,它仍然不会编译,因为运算符->只能在指向类类型的指针上调用,而不能在指向基本类型(如int)的指针上。以下是一个带有int *和相应错误消息的示例。

最新更新