2010-03-30 20 views
14

estoy mirando a una función miembrofunciones estáticas vs funciones const

int funct(int x) const; 

y me pregunto si

static int funct(int x); 

sería mejor.

Si una función miembro no utiliza ninguna de las variables miembro, debe ser estática. ¿Hay alguna cosa que desaliente esto?

+0

Una cológica mía sugirió que la forma const permite el polimorfismo. Eso es interesante. ¿Pensamientos? – baash05

+0

¿Por qué es esto una Wiki de la comunidad? – Uri

+0

Porque realmente no hay una respuesta. (más allá de la que mi compañero propuso) y no me gusta que me califiquen las preguntas. En el pasado, una pregunta técnica y específica me ha perdido puntos. Me encantan mis puntos personales, pero me sentí personalmente invalidado. Si le pregunto a T | S | A, pierdo. Si le pregunto "¿cuál es tu favorito ...?", Gano. Mi comprensión es wiki de la comunidad deja mis puntos solo. – baash05

Respuesta

18

Suponiendo que se trata de C++, una función declarada como const indica que no tiene la intención de cambiar los miembros de datos en la instancia a la que se llama, es decir, este puntero. Como hay formas de evadir esto, no es una garantía, simplemente una declaración.

Una función estática no funciona en una instancia específica y, por lo tanto, no toma un puntero "this". Por lo tanto, es "const" de una manera muy ingenua.

Si su método no necesita estar vinculado a una instancia específica, tiene sentido hacerlo estático.

Sin embargo, si su método es polimórfico, es decir, proporciona una implementación diferente en función de la instancia del objeto en el que se invoca, entonces no puede ser estático, ya que depende de una instancia específica.

+0

Sí. Hablé con mis compañeros de trabajo y llegamos a la misma idea. Gracias. – baash05

6

Si una función miembro no utiliza ninguna de las variables miembro, a menudo vale la pena hacer la pregunta:
"¿Tiene que ser una función miembro en primer lugar?"

Cuestiones relacionadas