Il soggetto è stato indirizzato principalmente qui (Where to declare/define class scope constants in C++?) e in particolare here.Definizione della costante integrale privata di una classe: nell'intestazione o nel file cpp?
Quello che vorrei per comprendere appieno, in caso di costanti integrale, c'è qualche differenza tra:
//In the header
class A {
private:
static const int member = 0; //Declaration and definition
};
E:
//In the header
class A {
private:
static const int member; //Only declaration
};
//In the cpp
const int A::member = 0; //Definition
(ho capito che il secondo potrebbe avere il vantaggio che se cambio il valore della costante, devo ricompilare solo un file)
Domande laterali:
Cosa succede ad esempio con un metodo inline definito nell'intestazione che accede a member
? Sarà semplicemente non in linea? Cosa succederebbe se, andando a un estremo, tutti i metodi fossero definiti nel file di intestazione come metodi inline e tutte le costanti fossero definite nel file cpp?
Edit:
mia scusa: ho pensato che non era necessario, ma mi mancava il fatto che il membro è statico. La mia domanda rimane, ma ora il codice è legale.
Il secondo è illegale. – chris
Non penso che la seconda versione debba essere compilata. Che compilatore stai usando? – juanchopanza
Quindi c'è un problema con Mingw. – juanchopanza