L'esatta formulazione della norma è:
L'utilizzo della parola chiave static
è deprecato quando si dichiara oggetti in ambito spazio dei nomi.
funzioni in un file di intestazione deve essere inline
piuttosto che static
o in uno spazio dei nomi senza nome. inline
significa che si finirà con al massimo una sola copia della funzione nel programma, mentre gli altri metodi forniranno una copia separata da ciascun file che include l'intestazione. Oltre a gonfiare, questo potrebbe dare un comportamento errato se la funzione contiene dati statici di funzione. (EDIT: a meno che la funzione debba avere definizioni diverse in unità di compilazione diverse, forse a causa di diverse macro di preprocessore definite prima di includere il file di intestazione. In tal caso, l'approccio migliore non è includerlo affatto, ma piuttosto per seppellirlo in una tomba non segnata con un paletto attraverso il suo cuore empio.)
Gli oggetti dati, a parte le costanti, di solito non dovrebbero essere definiti nei file di intestazione, solo dichiarati extern
.
Le funzioni membro statico sono un diverso tipo di pesce e devi utilizzare static
perché non c'è altro modo per dichiararle. Quell'uso non è deprecato, poiché non è nello scope namespace.
UPDATE: C++ 11 ha rimosso il deprecation, quindi non c'è più alcun motivo particolare per preferire namespace senza nome su static
. Ma non dovresti ancora usare un file di intestazione se non stai facendo qualcosa di strano.
fonte
2010-10-08 14:14:31
Sembra controproducente inserire file di intestazione statici (o non denominati) nei file di intestazione. Se sono statici, perché non si trovano solo nel file sorgente? –