senzainline
, è probabile che finirà con più esportato simboli, se la funzione è dichiarato al namespace globale o portata (risultati in errori del linker).
tuttavia, per una classe (come nel tuo esempio), la maggior parte dei compilatori dichiara implicitamente il metodo come inline (-fno-default-inline
disabiliterà quell'impostazione predefinita su GCC).
se si dichiara una funzione come inline, il compilatore può aspettarsi di vedere la sua definizione nella traduzione. pertanto, dovresti prenotare per le volte in cui la definizione è visibile.
a un livello superiore: una definizione nella dichiarazione di classe è spesso visibile a più traduzioni. questo può comportare un'ottimizzazione migliore e può comportare tempi di compilazione maggiori.
a meno che l'ottimizzazione della mano e la compilazione veloce siano entrambi importanti, è inusuale utilizzare la parola chiave in una dichiarazione di classe in questi giorni.
Cosa intendi per "TU" e "ODR"? – WiSaGaN
@WiSaGaN: TU = Unità di traduzione: approssimativamente, il file sorgente preelaborato. ODR = Una regola di definizione: è necessario che tutte le definizioni di una funzione/classe siano identiche, a livello di carattere, attraverso le TU. –
A livello di carattere o livello token? – fredoverflow