成员函数“指针”的大小

    之所以将指针用引号表示,是因为成员函数“指针”不是指针!还是让代码来说话。

#include <iostream>
using namespace std;

// 父类A
class A
{
public:
    int funA() { return 2; }
};

// 父类B
class B
{
public:
    int funB() { return 3; }
};

// 单继承
class C : public A
{
public:
    int funC() { return 4; }
};

// 多重继承
class D : public A, public B
{
public:
    int funD() { return 5; }
};

// 虚继承
class C1 : virtual public A
{
public:
    int funC1() { return 41; }
};

// 虚继承
class C2 : virtual public B
{
public:
    int funC2() { return 42; }
};

// 虚继承
class D1 : public C1, public C2
{
public:
    int funD1() { return 51; }
};

int main()
{
    /*
    ** 本人机子环境 XP + VS2008
    */

    // 这些函数指针大小都没变
    cout << sizeof( &main ) << endl;
    cout << sizeof( &A::funA ) << endl;
    cout << sizeof( &B::funB ) << endl;
    cout << sizeof( &C::funC ) << endl;

    // 多重继承
    cout << sizeof( &D::funD ) << endl;

    // 虚继承
    cout << sizeof( &C1::funC1 ) << endl;
    cout << sizeof( &C2::funC2 ) << endl;
    cout << sizeof( &D1::funD1 ) << endl;

    return 0;
}

    结果是不是挺吃惊的。具体原因呢——这有得说了。简单地说,就是多重继承、虚继承下的this指针偏移引起的。

 

参考资料

1.http://blog.csdn.net/caiguowu/article/details/6917842

2.http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible(这里面可以得到详细的解释)

posted @ 2012-05-30 20:45  木愚  阅读(560)  评论(0编辑  收藏  举报