【发布时间】:2010-03-26 13:26:01
【问题描述】:
一位同事询问了一些类似这样的代码,其中最初包含模板。
我已经删除了模板,但核心问题仍然存在:为什么编译正常?
#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对象,它的成员函数execute是const,所以CX::execute里面的this指针是const。
但我可以通过成员函数指针调用非常量成员函数。
成员函数指针是世界常量中的一个记录漏洞吗?
我们遗漏了什么(可能对其他人来说很明显)问题?
【问题讨论】:
标签: c++