【发布时间】:2014-04-12 14:02:09
【问题描述】:
如下三个类:
class Base
{
public:
int var1;
};
class Base2
{
public:
int var2;
};
class Derive:public Base,public Base2
{
public:
int var3;
};
int main()
{
printf("%d %d %d %d %d", &Base::var1, &Base2::var2, &Derive::var1, &Derive::var2, &Derive::var3);
int Derive::* p = &Derive::var1;
Derive d;
d.var1 = 2;
printf("%d", d.*p);
}
输出结果为0 0 0 0 8 2。我对&Derive::var1 和&Derive::var2 的结果感到困惑。为什么它们分别等于0 而不是0 和4?
注意:我用 gcc4.7.1 和 vs2010 测试过。结果是一样的。
【问题讨论】:
-
如果您认为它们中的任何一个应该等于不为零的值,您应该考虑包含 all 的相关代码...您发布的任何内容都没有包含此内容。
-
为了指向成员,你至少应该有一个实例!
-
@πάνταῥεῖ 您不需要实例来获取指向成员函数的指针即可调用它。
-
@πάνταῥεῖ 乍一看我也这么认为,但请注意这是有效的语法。
&Foo::a会将偏移量返回给成员 -
@Paranaix 我知道这一点,并且它是有效的语法!我的想法是:使用实例的 real 成员地址应该给 OP 一些说明。
标签: c++ member-pointers