So che static
const
class
i membri possono essere inizializzati solo nelle intestazioni. È lo stesso per gli spazi dei nomi? Ad esempio, è valida per scrivere:variabile globale const nel namespace
namehuman.hpp
namespace namehuman
{
string const human("human");
}
main.cpp
#include "namehuman.hpp"
cout << namehuman::human << endl;
Mi chiedo se tutti i file, tra cui il file di intestazione avrà la propria copia del string
umano, o se l'umano sarà una vera variabile globale (non copiata molte volte). Per evitare che ognuno includa il file che ne fa la copia, sono obbligato a utilizzare extern
?
Perché il voto negativo? – Florian
Anche se 'human' verrà definito più volte, non si tratta di una violazione ODR poiché le definizioni hanno un collegamento interno. La tua modifica suggerita, non è chiaro se si tratti di un miglioramento o meno, e potrebbe addirittura rallentare il codice; oltre a introdurre fiasco dove prima non c'era nessuno. –
@Florian, perché mentre il tuo codice "funziona", è una risposta sbagliata (a proposito, non ho fatto downvote). Vedi l'altra risposta. – GreatAndPowerfulOz