1.有代码如下:
#include <iostream>
using namespace std;
class base {
public:
int a = 10;
virtual void print() { cout << "In Base" << endl;}
};
class derived : public base {
public:
void print() { cout << " In devired" << endl;}
};
void display(base *pb, void(base::*pf)()) { (pb->*pf)();}
int main() {
derived d;
base *pb = &d;
void (base :: *pf)();
pf = base::print; //语句一
//pf = &base::print; // 语句二
display(pb, pf);
}
2.使用语句一和语句二输出结果相同,均为:In devired
; 请问为什么?
3.使用语句一pf = base::print
时,CLION提示Function 'print' must be static.
, 是CLION有问题么?
输出结果相同是因为pf指向同一个函数,为"In devired"是因为pf指向虚函数。
取非静态成员函数的地址必须加&。不是CLION的问题。
引自N4741, C++20 working draft. 这两部分历代标准应该都一样,不放心的话自己根据编译器设置查阅相关文档吧。