Tecnicamente, la parola chiave inline
significa solo che la definizione è consentita in più unità di traduzione. Cioè, se hai una funzione inline definita in un file di intestazione e quell'intestazione viene inclusa in più file sorgente, allora va bene. Per una funzione non in linea, non modello, sarebbe illegale.
Ma i compilatori possono sfruttare la possibilità di vedere il codice della funzione chiamata. Ciò accade non solo per le funzioni inline ma anche per tutte le altre funzioni il cui codice può essere visibile. Molti compilatori cercano di fare una buona ipotesi sull'integrazione del codice. Avere il codice in linea potrebbe rendere il programma più grande o più piccolo, più veloce o più lento. Se il compilatore può determinare che il codice sia probabilmente più veloce e più piccolo quando il codice è in linea, lo farà. Altrimenti deve considerare il trade-off.
Molti compilatori moderni possono eseguire l'ottimizzazione del collegamento in tempo reale, in cui il codice che non era stato inizializzato per iniziare può essere sottolineato durante la fase di collegamento, con un certo costo nel tempo di collegamento. Potrebbero esserci alcune opportunità di ottimizzazione che vengono perse se ritardate fino al momento della connessione.
Nella mia esperienza personale, ho scoperto che la realizzazione di piccole funzioni in linea è sempre una vittoria per dimensioni e velocità. Per le funzioni più grandi, vedo spesso che rende i programmi più veloci ma più grandi, ma ho anche visto raramente rendere i programmi più lenti e più grandi. Se le prestazioni di una particolare funzione sono importanti, è necessario effettuare misurazioni per aiutare a scegliere se allineare o meno.
fonte
2015-01-19 16:15:33
Quando si include un file di intestazione, il preprocessore copia e incolla letteralmente il codice nel punto in cui è stato inserito. – Andrew
Ti suggerisco di dare un'occhiata qui: http://programmers.stackexchange.com/questions/180904/are-header-files-actually-good –
'inline' per lo più non significa" rendere questo codice in linea "in C++ , ha più a che fare con la risoluzione delle collisioni dei nomi dei tempi di collegamento. "Mettere il codice in linea" ha poco significato nel contesto dello standard C++. – Yakk