2013-02-20 14 views
10

In C e C++, qual è il vantaggio di creare una variabile locale conststatic? Supponendo che l'inizializzazione non usi altre variabili, c'è qualche differenza tra preservare il valore tra le chiamate e impostare lo stesso valore costante per ogni chiamata?C/C++ Lo scopo della variabile locale const statica

Un compilatore C valido può ignorare lo static?

In C++, evita la costruzione/distruzione tra le chiamate, ma potrebbero esserci altri vantaggi?

+1

Al contrario di cosa - per 'const', per' static', o per nessun modificatore? – MathSquared

+0

Ho appena modificato la domanda. Supponendo che la var sia effettivamente const. – yukon

+2

Potresti trovare ciò che cerchi qui: http://stackoverflow.com/questions/3709207/c-semantics-of-static-const-vs-const – Carl

risposta

6

Non ci vuole up pila spazio può essere un vantaggio se si ha qualcosa di simile:

static const double table[fairly_large_number] = { .... }; 

Ovviamente, il costo di costruzione può anche essere sufficiente che, se la funzione è chiamato un sacco, non c'è sostanziale buon valore solo costruendo l'oggetto una volta.

+0

Il tuo punto sul prendere lo stack space ha senso, finché non ti accorgi che deve essere inizializzato perché è 'const'. Qualunque cosa tu voglia mettere in un file sorgente come costanti potrebbe probabilmente adattarsi facilmente allo stack. –

+0

Hmm, è utile. Un'altra piccola domanda, è probabile che una variabile volatile sia registrata? – yukon

+0

@MarkRansom: a) che dipenderebbe dalla dimensione dello stack, b) quante cose diverse come questa ho. E qualunque cosa faccia, l'elenco di inizializzazione farà parte del mio codice, in entrambi i casi. Se è, diciamo, una tabella di costanti generata da una macchina per un font Times Roman che voglio avere hard-coded nel mio word-processor, allora non sarebbe una buona cosa da mettere in pila, anche se lo stack è Abbastanza grande. In realtà ho scritto un codice che contiene tabelle LARGE, perché è più sensato che avere codice nel programma per creare le tabelle. –

2

Sì, ed è enorme: un vantaggio semantico.

Quando si inserisce const, non si intende semplicemente che il compilatore non dovrebbe consentire di modificare la variabile. Fai una dichiarazione più audace a chiunque legga il codice più tardi: questo non cambierà mai. Neanche per un effetto collaterale in cui si assegna questa variabile come puntatore a un'altra funzione.

Inoltre, il compilatore può sfruttare queste nuove informazioni e ottimizzarle in alcune situazioni, a seconda del tipo specifico con cui si ha a che fare.

(per essere chiari, io sto parlando qui circa const vs non-const, non static vs. non-static.)

Edit: This SO answer è troppo molto istruttiva.

Problemi correlati