我偶然发现了这段让我很困惑的代码:
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 *
和相应错误消息的示例。