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

unsigned int size = sizeof(MyClass::foo);  // obviously error

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

编辑:我知道上面的代码会出错(这就是“显然”这个词的原因)。想知道我们是否可以将 sizeof() 应用于成员方法。我不想详细描述用例。

4

4 回答 4

6

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

int size = sizeof( &MyClass::foo );

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

于 2011-07-25T07:13:40.417 回答
1

iirc 这无论如何都会返回函数指针的大小,那么为什么要这样做呢?还是我弄错了?

编辑:我弄错了,这是无效代码,如果函数不在类中,则事件。你可以用 sizeof 和 function 做的就是获取函数指针的大小(你需要先做)。如果您想获得功能代码占用的大小,您将需要一些其他方法来获得它。

进一步阅读: http: //msdn.microsoft.com/en-us/library/4s7x1k91 (v=vs.71).aspx

于 2011-07-25T06:52:39.430 回答
1

采用

sizeof(int (MyClass::*)())

因为您正在使用“返回的成员函数指针的大小并且不接受任何参数”。MyClassint

于 2011-07-25T06:58:45.273 回答
1

想知道我们是否可以找到 sizeof() 一个成员方法。

不,因为C++语言没有这样的概念。或者任何类型的函数的大小。

于 2011-07-25T07:16:00.907 回答