不,两者a
和b
的大小完全相同(b
不存储指向 的指针func
)。
C++ 中的类函数与对象本身没有链接(指向),它们只是作为任何其他函数存储。当你调用一个类函数时,你只是在调用一个普通函数(你不是从一个指针调用它)。这就是为什么在 C++ 中做类似的事情b.func = another_func;
是非法的。
在代码中说明这一点:
/////////
// C++
/////////
struct B {
int a;
int b;
int func() {
return this->a + this->b;
}
};
B b;
b.func();
//////////////////////////////
// Example compile output if it was compiled to C (not actual compile output!)
// i.e. this C code will do the equivalent of the C++ code above
//////////////////////////////
struct B {
int a;
int b;
};
int B_func(struct B* this) {
return this->a + this->b;
}
B b;
B_func(&b);
// This should illustrate why it is impossible to do this in C++:
// b.func = another_func;