我有一个类定义如下:
class A
{
public:
A()
{
fp = &A::f;
}
void (A::*fp)();
void f()
{
cout << "A::f()" << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
在main函数中,我定义了A类的对象,我想调用a.fp().但是,我发现我既不能用a.fp()也不用(a.fp)().最后,(a.*a.fp)()从语法的角度来看,这是完全奇怪的.
int main()
{
A a;
(a.*a.fp)();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释(a.*a.fp)()实际上意味着什么,为什么(a.fp)()不起作用?
让我们添加括号以使分组显式:
( a.*(a.fp) )()
Run Code Online (Sandbox Code Playgroud)
a.fp是对fp内部指针指向的常规访问a.a.*(...) 使用指向成员访问运算符的指针,通过间接检索成员函数.
(...)()在"callable"表达式中执行函数调用(...).
至于为什么(a.fp)()不起作用.这是因为指向成员的指针不像常规指针.您需要将它们应用于对象,即类的实例.因此,a.fp只检索指向成员的指针,该指针本身不是可调用类型.如果不应用于对象,则不能调用它,通过.*生成可调用表达式可以实现什么.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |