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

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

外部sizeof()からメンバーメソッドに適用できますか? オブジェクトを取得するためにオブジェクトを宣言する必要がありますか?class

編集:上記のコードでエラーが発生することはわかっています(そのため、「明らかに」という言葉があります)。sizeof() をメンバーメソッドに適用できるかどうか知りたいです。その使用例を長々と説明したくありません。

4

4 に答える 4

6

member-functionのサイズは取得できませんが、pointer-to-member-functionのサイズは取得できます。

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

非メンバー関数 (および静的メンバー関数) についても同様で、関数のサイズは取得できません。ほとんどのコンテキストでは、配列が最初の要素へのポインターに減衰するのと基本的に同じ方法で、関数の名前が関数へのポインターに自動的に減衰するため、誤解を招く可能性がありますが、配列の場合と同様にトリガーしません。つまり、ポインターを明示的に要求する必要があります。sizeof

于 2011-07-25T07:13:40.417 に答える
1

sizeof() メンバーメソッドを見つけることができるかどうか知りたいです。

いいえ、C++ 言語にはそのような概念がないためです。または、あらゆる種類の関数のサイズ。

于 2011-07-25T07:16:00.907 に答える
1

とにかく、これは関数ポインタのサイズを返すので、なぜそうするのですか? それとも私は間違っていますか?

編集:私は間違っていました。これは無効なコードであり、関数がクラス外の場合のイベントです。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 に答える