关于类成员函数指针的sizeof

Ale*_*x G 10 c++ pointers class sizeof member

假设我们有A级

class A;
Run Code Online (Sandbox Code Playgroud)

和这些typedef

typedef void (A::*a_func_ptr)(void);
typedef void (*func_ptr)(void);
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么sizeof(a_func_ptr)返回16,而sizeof(func_ptr)返回4(对于x86系统上的任何指针)?

例如

int main(int argc, char *argv[])
{
  int a = sizeof(a_func_ptr);
  int b = sizeof(func_ptr);
}
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 8

我的问题是为什么sizeof(a_func_ptr)返回16,而sizeof(func_ptr)返回4(对于x86系统上的任何指针)?

因为指向成员的指针的实现方式不同.他们不是引擎盖下的指针.某些编译器(如MSVC)struct会将其与多个成员一起实现.

阅读这篇有趣的文章:

请注意,在某些编译器中,它们可能具有相同的大小.底线是:它们依赖于编译器.