Cercherò di rispondere alla tua domanda, anche se è una vecchia domanda e non sembra molto importante (in realtà non è molto importante in sé ) e ha già ricevuto risposte abbastanza buone. Il motivo per cui voglio rispondere è che si riferisce a questioni fondamentali dell'evoluzione standard e della progettazione del linguaggio quando il linguaggio è basato su un linguaggio esistente: quando le caratteristiche del linguaggio dovrebbero essere deprecate, rimosse o modificate in modi incompatibili?
In C ++ è possibile utilizzare la parola chiave statica all'interno di un'unità di traduzione per influenzare la visibilità di un simbolo (dichiarazione di variabile o funzione).
Il collegamento in realtà.
In n3092, questo era deprecato:
Il ritiro indica:
- L' intento di rimuovere alcune funzionalità in futuro; questo non significa che le funzionalità deprecate verranno rimosse nella prossima revisione standard, o che debbano essere rimosse "presto", o del tutto. E le funzionalità non deprecate potrebbero essere rimosse nella prossima revisione standard.
- Un tentativo formale di scoraggiarne l'uso .
Quest'ultimo punto è importante. Sebbene non vi sia mai una promessa formale che il vostro programma non venga infranto, a volte silenziosamente, dallo standard successivo, il comitato dovrebbe cercare di evitare di infrangere il codice "ragionevole". La deprecazione dovrebbe indicare ai programmatori che è irragionevole dipendere da alcune funzionalità .
Sottolinea però che per compatibilità con C (e la capacità di compilare programmi C come C ++) la deprecazione è fastidiosa. Tuttavia, compilare un programma C direttamente come C ++ può già essere un'esperienza frustrante, quindi non sono sicuro che meriti considerazione.
È molto importante preservare un sottoinsieme comune C / C ++, specialmente per i file di intestazione. Naturalmente, le static
dichiarazioni globali sono dichiarazioni di simboli con collegamento interno e questo non è molto utile in un file di intestazione.
Ma il problema non è mai solo la compatibilità con C, è la compatibilità con il C ++ esistente: ci sono tonnellate di programmi C ++ validi esistenti che utilizzano static
dichiarazioni globali. Questo codice non è solo formalmente legale, è valido, poiché utilizza una funzionalità del linguaggio ben definita nel modo in cui è inteso essere utilizzato .
Solo perché ora esiste un "modo migliore" (secondo alcuni) per fare qualcosa non rende i programmi scritti alla vecchia maniera "cattivi" o "irragionevoli". La capacità di utilizzare la static
parola chiave su dichiarazioni di oggetti e funzioni a livello globale è ben compresa nelle comunità C e C ++ e molto spesso utilizzata correttamente.
Allo stesso modo, non cambierò i cast in stile C double
in static_cast<double>
solo perché "i cast in stile C sono cattivi", poiché static_cast<double>
aggiunge zero informazioni e zero sicurezza.
L'idea che ogni volta che viene inventato un nuovo modo di fare qualcosa, tutti i programmatori si affretterebbero a riscrivere il loro codice di lavoro ben definito esistente è semplicemente folle. Se vuoi rimuovere tutta la bruttezza ei problemi C ereditati, non cambi C ++, inventi un nuovo linguaggio di programmazione. Rimuovere a metà un uso di static
difficilmente rende C ++ meno C-brutto.
Le modifiche al codice richiedono una giustificazione e "il vecchio è cattivo" non è mai una giustificazione per le modifiche al codice.
Le interruzioni dei cambiamenti linguistici richiedono una giustificazione molto forte. Rendere la lingua leggermente più semplice non è mai una giustificazione per un cambiamento radicale.
Le ragioni addotte perché static
è cattivo sono solo notevolmente deboli, e non è nemmeno chiaro perché non sia gli oggetti che le dichiarazioni di funzione siano deprecati insieme - dare loro un trattamento diverso difficilmente rende il C ++ più semplice o più ortogonale.
Quindi, davvero, è una storia triste. Non a causa delle conseguenze pratiche che aveva: aveva esattamente zero conseguenze pratiche. Ma perché mostra una chiara mancanza di buon senso da parte del comitato ISO.