C++ 使用操作员->*

C++ 使用操作员->*,c++,operators,operator-overloading,C++,Operators,Operator Overloading,可能重复: 运算符->*的含义是什么 它如何在重载中有用?运算符->*用于指向成员的指针 struct foo{ void bar(){} }; int main(){ typedef void (foo:*foo_memptr)(); foo_memptr pfunc = &foo::bar; foo f; foo* pf = &f; (f.*pfunc)(); // on object or reference (pf->*pfunc)(

可能重复:

运算符
->*
的含义是什么


它如何在重载中有用?

运算符->*用于指向成员的指针

struct foo{
  void bar(){}
};

int main(){
  typedef void (foo:*foo_memptr)();
  foo_memptr pfunc = &foo::bar;
  foo f;
  foo* pf = &f;
  (f.*pfunc)(); // on object or reference
  (pf->*pfunc)(); // on pointer to object
}

重载它通常只对智能指针有用,即使它们也不这样做,因为它非常复杂,同样的功能可以通过
((*pf)。*pfunc)(
实现。斯科特·梅耶斯甚至写过

->*
*
运算符用于通过指针访问类成员,请参见以下链接以获取示例:


您可能也会发现它很有用。

另请参见。我不认为这是上述问题的重复,但也不是一个很好的问题。我本来要回答的,但这里是jist-
操作符->*
定义了一个二进制操作符,就像
操作符+
操作符*
,等等。它的优先级高于所有其他二进制运算符,因此在形成成员访问时非常有用,但低于
运算符[]
。它被广泛认为是模糊的,可能会混淆用户。