我发现了一些有趣的事情。错误消息说明了一切。获取非静态成员函数的地址时不允许使用括号的原因是什么?我在 gcc 4.3.4 上编译它。
#include <iostream>
class myfoo{
public:
int foo(int number){
return (number*10);
}
};
int main (int argc, char * const argv[]) {
int (myfoo::*fPtr)(int) = NULL;
fPtr = &(myfoo::foo); // main.cpp:14
return 0;
}
错误:main.cpp:14:错误:ISO C++ 禁止采用未限定或带括号的非静态成员函数的地址来形成指向成员函数的指针。说“&myfoo::foo”
从错误消息来看,似乎不允许您获取带括号的表达式的地址。建议你重写
fPtr = &(myfoo::foo); // main.cpp:14
to
fPtr = &myfoo::foo;
这是由于规范 (§5.3.1/3) 的一部分内容如下
仅当使用显式 & 并且其操作数是限定 ID 时才会形成指向成员的指针不包含在括号中 [...]
(我的重点)。我不确定为什么这是一条规则(而且直到现在我才真正知道这一点),但这似乎是编译器抱怨的。
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)