Const e static sono concetti ortogonali sia in C che in C++.
La parola chiave const
dice al compilatore di impedire alla variabile di apparire come lvalue di qualsiasi espressione, essenzialmente rendendola di sola lettura.
In C, la parola chiave static
ha diversi usi a seconda di cosa viene applicata. Quando applicato a una variabile di una funzione, indica che la variabile non è memorizzata nello scope locale di una funzione, ma è accessibile attraverso invocazioni di essa. Quando viene applicato a una variabile o funzione globale, diventa accessibile solo a un determinato file - in altre parole, è accessibile solo all'interno dell'unità di compilazione (a meno che non sia dichiarato extern
).
In C++, la parola static
può essere utilizzato all'interno di una definizione di classe, per fare una variabile o funzioni condivisi in tutte le istanze della classe, piuttosto che essere locale per ogni istanza. Inoltre, una funzione di classe statica in C++ può solo accedere a variabili statiche di quella classe (o classi a cui ha accesso). Ora, in C++, const
fornisce ai membri il collegamento interno all'unità di compilazione, a meno che non vengano dichiarati esplicitamente extern
- questo potrebbe essere ciò a cui si sta riferendo. Ciò consente di condividere le costanti in fase di compilazione attraverso l'unità tramite l'uso di file di intestazione. Tieni presente, tuttavia, che i membri non sono realmente statici, piuttosto che la costante è compilata in in ciascuna posizione a cui viene fatto riferimento.
Il razionale aiuta a spiegare perfettamente. – FaceBro
Sembra che anche gli oggetti globali non const possano essere inizializzati, ma perché lo standard non gli fornisce il collegamento interno? –