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

时间:2012-02-13 18:07:34

标签: c++ syntax

我偶然发现了这个令我困惑的代码:

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

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

P.S。 SomeFunction()函数在类中声明如下:

const int * SomeFunction() {return ipValue;}

3 个答案:

答案 0 :(得分:3)

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

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

如前所述,如果SomeFunction()返回一个int *,则无效。

答案 1 :(得分:3)

这是编译错误。

int是基本类型,而不是类,因此您无法在其上调用方法。

此技术称为方法链接。如果成员函数返回对象或指向对象的指针,则可以调用后续方法。在您的情况下,它不会编译,因为该方法返回int。但是,类似下面的内容可行:

class A
{
public:
   A* foo();
   A* goo();
};

A* a = new A;
a->foo()->goo()->foo();

答案 2 :(得分:1)

这意味着,方法SomeFunction()返回某种指针或指针式对象,然后调用AnotherFunction()

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

修改

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