一位同事询问了一些原来有模板的代码。为什么我可以从const方法调用非const成员函数指针?
我已经删除了模板,但核心问题依然存在:为什么编译好?
#include <iostream>
class X
{
public:
void foo() { std::cout << "Here\n"; }
};
typedef void (X::*XFUNC)() ;
class CX
{
public:
explicit CX(X& t, XFUNC xF) : object(t), F(xF) {}
void execute() const { (object.*F)(); }
private:
X& object;
XFUNC F;
};
int main(int argc, char* argv[])
{
X x;
const CX cx(x,&X::foo);
cx.execute();
return 0;
}
鉴于CX是const对象,它的成员函数执行是常量,因此内部CX ::执行这指针是常量。
但我能够通过成员函数指针调用非const成员函数。
成员函数指针是世界常量的一个记录的漏洞吗?
我们错过了什么(大概很明显是他人)问题?
尽管如此,用'const'方法只能在成员对象上调用'const'方法,是不是正确? – 2010-03-26 13:34:30
成员是引用,而不是引用的对象。 – 2010-03-26 13:37:18