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-
操作符->*
定义了一个二进制操作符,就像操作符+
,操作符*
,等等。它的优先级高于所有其他二进制运算符,因此在形成成员访问时非常有用,但低于运算符[]
。它被广泛认为是模糊的,可能会混淆用户。