Le funzioni inline sono funzioni per le quali il compilatore può (ma non è obbligato a) sostituire la chiamata con l'inserimento diretto del codice della funzione nel punto di chiamata. Per questo si utilizza la parola chiave inline.
inline dà un consiglio al compilatore, ma non è un obbligo: può essere ignorata se la funzione è troppo complessa.Limiti e rischi:
Esempio:
inline int add(int a, int b) { return a + b; } struct X { int get() const { return value; } int value; }; // get() sarà considerata come inline
Domanda: Garantisce la parola chiave inline che la funzione sarà incorporata in tutti i punti di chiamata?
Risposta: No. Il compilatore decide autonomamente l'inserimento della funzione inline, in base a intuizioni interne. inline è solo una raccomandazione.
Storia
In un sistema finanziario è stato scritto un logger frequentemente utilizzato con decine di grandi funzioni inline. Dopo la crescita del sistema, la dimensione del binario è aumentata notevolmente, portando a un aumento dei tempi di collegamento e a una riduzione dell'efficienza della cache sul server.
Storia
Durante la migrazione di software multipiattaforma, è emerso che alcuni compilatori (ad esempio, MSVC e GCC) gestiscono diversamente inline: parte delle funzioni non veniva espansa inline, parte invece lo era, causando differenze di velocità e dimensioni delle applicazioni difficilmente replicabili tra le piattaforme.
Storia
Uno sviluppatore ha dichiarato funzioni inline solo nel file header, ma ha spostato l'implementazione in un file cpp separato. Di conseguenza, durante il collegamento si sono verificati errori di definizione multipla o esterna irrisolta, poiché le funzioni inline devono essere definite nei header.