揭开神秘的成员函数指针调用
在面向对象编程的世界中,成员函数指针在操作类中起着至关重要的作用成员。然而,通过指针调用成员函数可能是一项令人困惑的任务。考虑以下代码片段:
class cat { public: void walk() { printf("cat is walking \n"); } }; int main(){ cat bigCat; void (cat::*pcat)(); pcat = &cat::walk; bigCat.*pcat(); }
尝试编译此代码会导致错误。有趣的问题仍然是:为什么看似无害的 bigCat.*pcat() 语句无法编译?
破译问题
答案在于运算符的优先级。在此代码片段中, () 表达式的优先级高于 .* 指向成员的指针绑定运算符。因此,编译器将表达式解释为 (bigCat.*)pcat(),这不是预期的行为。
解决难题
要解决此问题,我们需要明确指定操作的优先级。通过在表达式 bigCat.*pcat() 周围添加括号,我们确保首先发生指向成员的指针绑定。
(bigCat.*pcat)();
结论
随着正确放置括号后,代码现在可以正确编译和执行。这提醒我们,理解运算符优先级对于确保正确解释代码至关重要。
以上是为什么调用成员函数指针时`bigCat.*pcat()`编译失败?的详细内容。更多信息请关注PHP中文网其他相关文章!