2010-03-30 9 views
14

Je regarde une fonction membrefonctions statiques vs fonctions const

int funct(int x) const; 

Et je me demande si

static int funct(int x); 

serait mieux.

Si une fonction membre n'utilise aucune variable membre si elle est statique. Y a-t-il des choses qui décourageraient cela?

+0

Un colloque de la mienne a suggéré que la voie const permet le polymorphisme. C'est intéressant. Pensées? – baash05

+0

Pourquoi est-ce un wiki communautaire? – Uri

+0

Parce qu'il n'y a pas vraiment de réponse. (au-delà de celui que mon copain a proposé) et je n'aime pas avoir des questions cotées. Dans le passé, une question technique spécifique a perdu des points. Je ne jure pas sur mes points personnels, mais je me sentais personnellement invalidé. Si je demande un T | S | A, je perds. Si je demande un "quel est votre fav ...", je gagne. Ma compréhension est la communauté wiki laisse mes points seuls. – baash05

Répondre

18

En supposant que ce soit C++, une fonction déclarée comme const indique qu'elle n'a pas l'intention de changer les membres de données sur l'instance sur laquelle elle est appelée, c'est-à-dire, ce pointeur. Comme il existe des moyens de contourner cela, ce n'est pas une garantie, mais simplement une déclaration.

Une fonction statique ne fonctionne pas sur une instance spécifique et ne prend donc pas un pointeur "this". Ainsi, c'est "const" d'une manière très naïve.

Si votre méthode n'a pas besoin d'être liée à une instance spécifique, il est logique de la rendre statique. Cependant, si votre méthode est polymorphe, c'est-à-dire que vous fournissez une implémentation différente basée sur l'instance de l'objet sur lequel elle est invoquée, elle ne peut pas être statique car elle dépend d'une instance spécifique.

+0

Ouais. J'ai parlé à mes collègues et nous sommes arrivés à la même idée. Merci. – baash05

6

Si une fonction membre n'utilise aucune des variables membres, il est souvent utile de poser la question:
"Est-ce que cela doit être une fonction membre en premier lieu?"

Questions connexes