Comment appliquer l'opérateur sizeof () aux méthodes membres de classe non statique?

StackOverflow https://stackoverflow.com/questions/6812623

  •  25-10-2019
  •  | 
  •  

Question

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

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

Peut-on appliquer aux méthodes sizeof() membres de extérieur class? Avons-nous besoin pour objet Déclare obtenir?

Modifier : Je sais que le code ci-dessus donnera erreur (qui est pourquoi mot 'évidemment'). Je voulais savoir si nous pouvons appliquer à tous les sizeof () à une méthode membre. Je ne veux pas décrire le cas d'utilisation de cette longueur.

Était-ce utile?

La solution

Vous ne pouvez pas obtenir la taille d'un fonction de membre , mais vous pouvez obtenir le sizeof pointeur à fonction de membre :

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

en va de même pour les fonctions non membres (et les fonctions membres statiques), on ne peut obtenir la taille de la fonction. Il pourrait être trompeur, car dans la plupart des contextes, le nom de la fonction désintégrations automatiquement en un pointeur vers la fonction essentiellement de la même manière qu'un tableau désintégrations à un pointeur vers la premier élément, mais comme dans le cas des tableaux, sizeof ne déclenche pas la désintégration et que des moyens de tour que vous devez demander pour le pointeur explicitement.

Autres conseils

IIRC ce renverrait la taille du pointeur de la fonction de toute façon, alors pourquoi le faire? Ou je me trompe?

Edit: je me suis trompé, ce code est invalide, événement si la fonction était hors de la classe. Tout ce que vous pouvez faire avec sizeof et la fonction est d'obtenir la taille du pointeur de fonction (que vous devez faire en premier). Si vous souhaitez obtenir la taille occupée par le code de fonction, vous aurez besoin d'une autre manière d'obtenir cela.

Quelques lectures complémentaires: http: // msdn .microsoft.com / fr-fr / bibliothèque / 4s7x1k91 (v = vs.71) .aspx

Utilisez

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

puisque vous prenez la « taille d'un pointeur de fonction de MyClass que les rendements int et ne prend aucun argument ».

Je voulais savoir si nous pouvons trouver tout le sizeof () une méthode membre.

Non, parce que le langage C ++ ne dispose pas d'un tel concept. Ou la taille de tout type de fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top