In questa risposta https://stackoverflow.com/a/4193698/738811 è scritto che "Le funzioni in linea hanno un collegamento esterno predefinito". Tuttavia, per impostazione predefinita non è possibile eseguire il collegamento a qualcosa che è in linea. Quindi, che senso ha dire che le funzioni in linea hanno un collegamento esterno?Funzioni inline e collegamento esterno
risposta
Il collegamento di un nome non ha nulla a che fare con dove o come viene definito, solo con il nome che può essere utilizzato per fare riferimento a un particolare oggetto o funzione.
Dichiarare una funzione in linea non forzarla in linea; semplicemente rilassa la regola di una definizione per consentire una definizione in ciascuna unità di traduzione in cui viene utilizzata (e ne richiede una in ciascuna unità di traduzione in cui è chiamata), per semplificare l'allineamento. Non impedisce la generazione di una versione non in linea, se il compilatore decide di non effettuare la chiamata in linea specifica o se ne prende l'indirizzo.
Quindi "collegamento esterno" e "in linea" non sono esclusivi; "collegamento esterno" significa che la funzione può essere riferita a qualsiasi unità di traduzione e "in linea" significa che deve essere definita in qualsiasi unità di traduzione che la chiama.
Forse un modo migliore per esprimerlo è "Se il collegamento è necessario, sarà esterno". Significato, se si prende l'indirizzo della funzione inline, quell'indirizzo sarà visibile esternamente (non statico per un modulo).
Le funzioni inline non sono necessariamente espanse in linea. Quando non lo sono, la definizione della lingua richiede che ci sia solo una copia della funzione.
Le funzioni in linea sono in genere "collegabili" da altre unità di compilazione. Non appariranno come funzioni inline. C'è una copia della funzione nel file compilato. Questo vale per le funzioni inline gratuite. Le funzioni dei membri della classe non ottengono, in genere, una copia della funzione per l'utilizzo "non in linea". I linker validi rimuovono anche il codice come "codice morto" se non viene mai sottoposto a un nuovo riferimento.
- 1. Errore di collegamento per funzioni inline
- 2. collegamento esterno in C
- 3. Funzioni inline "C" esterne
- 4. Funzioni inline Callgrind
- 5. Perché le funzioni in linea hanno un collegamento esterno per impostazione predefinita?
- 6. C++: funzioni inline e generazione del codice di tempo di collegamento
- 7. Può funzioni virtuali essere inline
- 8. La funzione inline influisce sul suo collegamento?
- 9. Rcpp + inline - creazione e richiamo di funzioni aggiuntive
- 10. Ci sono funzioni inline in java?
- 11. Comportamento di __LINE__ a funzioni inline
- 12. Comprensione del dizionario con funzioni inline
- 13. Come rendere le funzioni inline in C#
- 14. Dovrei usare `inline` su funzioni molto usate?
- 15. Passaggio delle funzioni inline come argomenti
- 16. Variabili locali static/thread_local delle funzioni inline?
- 17. Aprire un collegamento esterno in Safari (cordova)
- 18. Inline Definizioni
- 19. Javascript - inline vs script esterno - qual è la differenza?
- 20. Differenza tra una funzione inline e una funzione inline statica
- 21. Dimensioni del codice: statico in linea rispetto a inline per funzioni definite nei file di intestazione
- 22. formfield_for_foreignkey e Inline Admin
- 23. AngularJS: funzioni di compilazione e collegamento di ng-repeat
- 24. Le funzioni di GCC inline C++ senza la parola chiave 'inline'?
- 25. Funzioni inline in build di debug (Visual C++ 2008)
- 26. C++ 11 qualificatore e metodi inline noex
- 27. Perché il compilatore Delphi non ha funzioni di assemblaggio inline?
- 28. Quanto sono profonde le funzioni inline dei compilatori?
- 29. Funzioni inline C++ tramite GCC - perché la CHIAMATA?
- 30. le funzioni inline appaiono ancora nel file .prof