2010-03-30 23 views
14

Sto guardando una funzione di membrofunzioni statiche vs funzioni const

int funct(int x) const; 

e mi chiedo se

static int funct(int x); 

sarebbe meglio.

Se una funzione membro non utilizza nessuna delle variabili membro, dovrebbe essere statica. Ci sono cose che potrebbero scoraggiare questo?

+0

Un mio collante ha suggerito che il modo costante consente il polimorfismo. È interessante. Pensieri? – baash05

+0

Perché questo è un Wiki di comunità? – Uri

+0

Perché non c'è davvero una risposta. (oltre a quello proposto dal mio compagno) e non mi piace avere domande valutate. In passato, le domande tecniche specifiche e risposte hanno perso punti. Non mi frega niente dei miei punti personali, ma mi sono sentito personalmente invalidato. Se chiedo un T | S | A, perdo. Se chiedo un "qual è il tuo favore ...", guadagno. La mia comprensione è che la wiki della comunità lascia da solo i miei punti. – baash05

risposta

18

Supponendo che questo sia C++, una funzione dichiarata come const indica che non intende modificare i membri dati sull'istanza su cui è chiamato, ovvero, il puntatore. Poiché ci sono modi per eludere questo, non è una garanzia, ma solo una dichiarazione.

Una funzione statica non funziona su un'istanza specifica e pertanto non utilizza un puntatore "questo". Quindi, è "const" in modo molto ingenuo.

Se il metodo non deve essere associato a un'istanza specifica, è opportuno renderlo statico.

Tuttavia, se il metodo è polimorfico, ovvero fornisce un'implementazione diversa in base all'istanza dell'oggetto su cui è stato richiamato, non può essere statico, poiché dipende da un'istanza specifica.

+0

Sì. Ho parlato con i miei colleghi e siamo arrivati ​​allo stesso pensiero. Grazie. – baash05

6

Se una funzione membro non utilizza nessuna delle variabili membro, vale spesso la pena di porre la domanda:
"Questo deve essere una funzione membro in primo luogo?"