如何将sizeof()运算符应用于非静态类成员方法?

iam*_*ind 1 c++ sizeof member-functions

struct MyClass {
  int foo () { return 0; }
};

unsigned int size = sizeof(MyClass::foo);  // obviously error
Run Code Online (Sandbox Code Playgroud)

我们可以应用sizeof()到成员方法从外面class?我们需要声明对象来获取它吗?

编辑:我知道上面的代码会给出错误(这就是为什么单词"显然").想知道我们是否可以将sizeof()应用于成员方法.我不想详细描述用例.

Dav*_*eas 6

您无法获取成员函数的大小,但可以获取指向成员函数指针的大小:

int size = sizeof( &MyClass::foo );
Run Code Online (Sandbox Code Playgroud)

对于非成员函数(和静态成员函数)也是如此,无法获得函数的大小.这可能会产生误导,因为在大多数情况下,函数的名称自动衰减到指向函数的指针,基本上与数组衰减到指向第一个元素的指针的方式相同,但在数组的情况下,sizeof不会触发衰变,这反过来意味着你必须明确地要求指针.

  • @Charles:我确实同意通常*指向成员*,但在这种特殊情况下,特殊情况不是因为它是*成员*,而是因为它是*函数*,同样的问题会出现一个非成员函数`sizeof(f)`将无法以相同的方式编译.我不认为标准在处理*functions*与*member-functions*相对于`sizeof`运算符时有所区别.无论如何,我已经编辑过,希望它可能很清楚,如果它没有随意编辑或告诉我.谢谢! (2认同)