クラス/構造体とそれぞれのオブジェクトがメモリ内でどのように配置されるかを理解するために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);
コンパイルすらしませんか?