我见过一个例子。在该示例中,有一行像x->*y
。它是什么? ->*
。我是C ++编程的新手,我对运算符知之甚少。任何人都能形容它吗?
答案 0 :(得分:4)
它被称为“指向指针成员的指针”,并且是“指向成员的指针”类型操作符之一(除了.*
,“指向对象成员的指针”)。
当您获取成员变量或类的函数的地址时,您可以使用它,然后您想要访问该变量或在该类的实例上调用该函数,给定指向该实例的指针(如香草)数据或函数指针,但是对于一个类成员)。
以下是使用函数指针的示例:
#include <cstdio>
using namespace std;
class Example {
public:
Example (int value) : value_(value) { }
void printa (const char *s) { printf("A %i %s\n", value_, s); }
void printb (const char *s) { printf("B %i %s\n", value_, s); }
private:
int value_;
};
// print_member_ptr can point to any member of Example that
// takes const char * and returns void.
typedef void (Example::* print_member_ptr) (const char *);
int main () {
print_member_ptr ptr;
Example x(1), y(2), *p = new Example(3), *q = new Example(4);
ptr = &Example::printa;
// .*ptr and ->*ptr will call printa
(x.*ptr)("hello");
(y.*ptr)("hello");
(p->*ptr)("hello");
(q->*ptr)("hello");
ptr = &Example::printb;
// now .*ptr and ->*ptr will call printb
(x.*ptr)("again");
(y.*ptr)("again");
(p->*ptr)("again");
(q->*ptr)("again");
}
输出结果为:
A 1 hello
A 2 hello
A 3 hello
A 4 hello
B 1 again
B 2 again
B 3 again
B 4 again
有关详细信息,请参阅http://en.cppreference.com/w/cpp/language/operator_member_access。
答案 1 :(得分:2)
由 a 指向的对象的 b 指向的成员。
<强>语法强>
a->*b
作为K的成员
R &operator ->*(K a, S b);
课外定义
R &K::operator ->*(S b);
请参阅Wikipedia。