我正在尝试使用C++来理解类/结构和它们各自的对象是如何在内存中布局的,我理解类/结构的每个字段都是它们各自对象的偏移量(所以我可以有一个成员变量指针)。成员函数的存储位置在哪里?
我不明白为什么,即使我可以有成员函数指针,下面的代码无法正常工作:
struct mystruct
{
void function()
{
cout << "hello world";
}
int c;
};
int main()
{
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function); // ERROR - error C2276: '&' : illegal operation on bound member function expression
return 0;
}
我的问题是:为什么行
unsigned int offset_from_start_structure = (unsigned int)(&((mystruct*)0)->c);
编译并返回从结构起始处的“c”字段的偏移量和行
unsigned int offset_from_start_structure2 = (unsigned int)(&((mystruct*)0)->function);
d甚至不能编译?
成员函数不存储在对象中(为什么会这样?它们对于该类型的所有对象都是相同的)。如果它有帮助(也许不是;也许它只会增加混淆,但我会尝试)成员函数指针是*不*指针。 – 2013-03-22 14:10:39
你在期望内存中的_function_的内容是什么?函数不是数据。他们是代码。 – 2013-03-22 14:12:41
“我正在尝试使用C++来理解类/结构和它们各自的对象是如何在内存中布局的”实现细节,与语言无关 – 2013-03-22 14:12:43