2012-12-27 9 views
5

spesso nelle intestazioni vedoÈ statico necessario quando si dichiarano glob cost?

//global namespace, not in class 
static const int my_global =1984; 

ma di recente ho appreso che const implica il collegamento interno, quindi mi chiedo doesnt che rendono statica inutile?

+0

come ti senti cose sono contraddittorie/ridondante? non vedo come sono. "statico" darà il collegamento interno dichiarazione *** e ***, che è una cosa diversa in ogni caso non è ridondante:. estraneo – sehe

+0

senza 'static' ci sarebbe una nuova definizione della variabile ogni volta che l'intestazione è #include – acraig5075

+0

@ acraig5075 non capisco ... guardie di intestazione assicurarsi qou includono solo una volta. , anche se includi 50x nel tuo codice con #include – NoSenseEtAl

risposta

6

Dipende. In C++, non è necessario, ma alcune persone (me compreso) amano inserirla, per dire cosa intendiamo. E, naturalmente, se l'intestazione deve essere utilizzata anche in C, è necessario (ma per molti usi in C, è necessario un #define).

1

In C++, non è necessario (ridondante) avere la parola chiave statica per impedire il collegamento globale, poiché const lo fa per C++ standard (C++ 98, C++ 03, C++ 11). In C, tuttavia, la parola chiave static è necessaria affinché una variabile abbia un collegamento locale (file). Dal momento che molte pratiche di codifica C sono state effettuate in C++ per abitudine (c'è un sacco di sovrapposizione), alcune persone possono portare questa abitudine nel corso senza pensare. Ho sentito dire che la parola chiave statica ridondante in C++ per indicare il collegamento non globale aiuta i programmatori C a capire.

Io stesso preferisco la precisione della programmazione in C++ con idiomi C++, in modo da non perpetuare il codice C in C++, che può portare a errori sottili, o almeno a sprecare e codice ridondante (come il controllo abituale per NULL prima di chiamare cancellare su un puntatore.

Problemi correlati