例如我有一个内部类:
struct Foo {
void test() {}
};
和一个外部类:
struct Bar {
Foo foo;
};
然后在 main()
中:
Bar bar{};
Foo Bar::* pFoo = &Bar::foo;
bar.*pFoo.test(); // does not work
Foo foo = bar.*pFoo;
foo.test(); // works;
关于bar.*pFoo.test()
的错误是:member reference base type 'Foo Bar::*' is not a structure or union
, 那是什么bar.*pFoo.test();
和 Foo foo = bar.*pFoo; 的区别foo.test();
?
最佳答案
正如评论中所暗示的那样,.*
的运算符优先级低于 .
.
因此 bar.*pFoo.test();
被解析为 bar.*(pFoo.test());
并试图访问
成员。pFoo
的测试
因为pFoo
是Foo Bar::*
类型的成员指针,所以这不是一个有效的表达式。只有类类型可以出现在成员访问运算符 .
的左侧(除了伪析构函数调用语法),成员指针不是。
第二个示例等效于表达式 (bar.*pFoo).test();
相反。
关于c++ - 为什么我不能直接调用通过成员指针访问的实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59136519/