我正在嘗試使用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