Cela a-t-il même un sens?Une méthode de classe peut-elle être à la fois en ligne et statique?
Répondre
static
signifie que la méthode n'est pas associée à une instance d'une classe. (c'est-à-dire qu'il n'a pas de "ce" pointeur).
inline
est une indication du compilateur que le code de la méthode doit être inclus dans la ligne où il est appelé, au lieu d'être appelé via une branche normale. (Sachez que de nombreux compilateurs ignorent ce mot-clé et utilisent leurs propres métriques pour décider s'ils doivent être intégrés).
Ce sont des concepts orthogonaux (non apparentés), donc il n'y a pas de raison particulière pour laquelle ils n'ont pas pu être combinés.
Je ne vois pas pourquoi pas. Un membre de classe statique est comme une fonction autonome avec un accès privé aux autres fonctions membres.
Oui, il n'y a pas de raison pour que celles-ci ne puissent pas être combinées.
Vous pouvez.
Cependant, le manuel de GCC indique que la fonction ne sera pas intégrée par le compilateur dans le code si:
- vous appelez la méthode avant de le définir, ou
- il y a des appels récursifs dans la définition.
Source: GCC Manual - discute à la fois C et C++.
J'ai essayé de coder ces deux scénarios dans Visual C++ en utilisant une petite classe d'échantillons appelée Class1. Voici l'extrait pertinent, où incTest est défini dans mon fichier Class1.h.
// test static inline method - based on the GCC manual's C example
static inline int inc (int *a)
{
return (*a)++;
}
// test recursive call in a static inline method
static inline int fac (int x)
{
return x * fac(x-1);
}
int Class1::incTest(int* x)
{
return inc(x);
}
Ceci est la version qui compile avec succès. Toutefois, si j'utilise Visual C++ et que je déplace la définition de inc() vers la définition d'incTest(), le fichier ne se compile pas correctement, ce qui me donne une erreur lors de l'appel de inc() en disant: a trouvé". Edit: révisé ma réponse pour prendre en compte les commentaires et les résultats de mes tests dans Visual C++.
aucune de ces conditions ne vous empêche de déclarer une méthode en ligne. –
C'est faux. Aucune des restrictions ne fait partie de C++. Ils peuvent limiter la capacité d'une fonction à être intégrée dans le code généré, mais vous pouvez toujours les marquer comme étant en ligne. Cela est utile s'ils doivent être définis dans un fichier d'en-tête, par exemple s'ils sont basés sur un modèle. – KeithB
- 1. getDeclaredMethods() et la méthode statique de la super classe masquée
- 2. Comment appeler une méthode statique d'une classe en utilisant le nom de la méthode et le nom de la classe
- 3. Accès à une méthode statique en C#
- 4. La classe interne doit-elle être statique en Java?
- 5. Comment référencer une méthode statique d'une classe variable en PHP?
- 6. PHP Méthode statique en utilisant une classe privée Fonctions/Variables
- 7. Pouvons-nous concevoir singleton en mettant tous les membres de données et la méthode d'une classe à être statique?
- 8. Une méthode exécutée plusieurs fois dans une classe PHP doit-elle être mise en cache dans une variable de classe?
- 9. référence à une variable statique d'une méthode statique de la même classe
- 10. Méthode statique retournant la classe interne
- 11. méthode statique en tant que paramètre par défaut à une méthode de classe
- 12. En C#, un attribut peut-il être appliqué à une classe, une méthode ou une propriété statique?
- 13. Appel de constructeur de sous-classe à partir de la méthode de classe de base statique
- 14. appelle une méthode statique à l'intérieur d'une classe?
- 15. Can IWindsorContainer peut-il être instancié par une méthode statique?
- 16. faire une fonction statique/classe en dehors de la classe
- 17. AS3: appeler une méthode de classe statique - les noms de classe et de méthode sont des chaînes
- 18. Déterminer si une méthode existe dans une classe statique
- 19. C# WinForms Passage du dictionnaire de la classe statique à la classe non statique Classe
- 20. Appel de la méthode statique à partir de la classe B (extension de la classe A) de la classe A
- 21. PHPunit mockobject méthode abstraite et statique
- 22. Variable de membre statique et méthode
- 23. Déclarez une méthode statique Objective-C qui peut être appelée sans instance de classe?
- 24. Imposer la surcharge de méthode statique dans la classe des enfants en C++
- 25. Comment invoquer une méthode de façon statique?
- 26. La méthode AutoCompletionExtender d'AJAX Control Toolkit doit-elle être statique?
- 27. Puis-je accéder à une méthode statique dans une classe spécifiée dynamiquement en Perl?
- 28. Existe-t-il une méthode statique "à la fois nulle ou égale"?
- 29. La classe de contrat doit être une classe abstraite
- 30. Réflexion: obtenir Méthode statique de la classe parente
La signification la plus importante de inline est que plusieurs définitions de la méthode sont autorisées (et supposées identiques). Cela permet aux définitions de fonctions d'être placées dans des fichiers d'en-tête #include à plusieurs endroits. Toujours pas de raison qu'ils ne peuvent pas être combinés. En fait, pour une méthode statique dans un modèle, ils doivent l'être. – KeithB