2014-12-24 17 views
11

C'è una tale cosa ed è nell'ultima C++ progetto:Che cos'è una funzione "in linea esterna" e quando usarla?

al § 7.1.2 .4:

una funzione inline è definita in ogni unità di traduzione in cui si è ODR-usato e deve avere esattamente la stessa definizione in ogni caso (3.2). [Nota: è possibile che venga visualizzata una chiamata alla funzione in linea prima che la sua definizione venga visualizzata nell'unità di traduzione. - end note] Se appare la definizione di una funzione in un'unità di traduzione prima della sua prima dichiarazione come inline, il programma è mal formato. Se una funzione con collegamento esterno viene dichiarata in linea in una unità di traduzione, essa viene dichiarata in linea in tutte le unità di traduzione in cui appare, in linea ; non è richiesta alcuna diagnostica. Una funzione inline con collegamento esterno deve avere lo stesso indirizzo in tutte le unità di traduzione. Una variabile locale statica in una funzione incorporata esterna fa sempre riferimento allo stesso oggetto . Un tipo definito all'interno del corpo di una funzione in linea esterna è dello stesso tipo in ogni unità di traduzione.

Alcuni approfondimenti su cosa è questo e quando usarlo?

+0

Forse un suggerimento sull'ottimizzazione del collegamento? – leppie

risposta

3

extern è ridondante per le funzioni, quindi è inutile dichiarare una funzione extern inline. Se, ad esempio, hai dichiarato una funzione inline nell'ambito globale, si applicano le regole di questa sezione. Allo stesso modo, se hai dichiarato una classe nell'ambito globale e definito una funzione membro all'interno della definizione della classe, tale funzione sarebbe implicitamenteinline.

La domanda su quando si dovrebbe dichiarare una funzione inline è una lattina di worm che non sono propenso ad aprire qui. Vedi: When should I write the keyword 'inline' for a function/method?

+0

'static' potrebbe essere degno di nota. – Yakk

Problemi correlati