Qual è la sintassi esatta di inline?

1

CASO 1 (Definizione e dichiarazione nello stesso file sorgente)

Supponiamo che sia il mio prototipo sia la definizione della funzione globale siano nel file .cpp. Dove dovrei scrivere parole chiave in linea per far sapere al compilatore?

  1. Nel prototipo
  2. Nella definizione
  3. Entrambi

CASO 2 (Definizione e dichiarazione nello stesso file di intestazione)

Se ho dichiarato i prototipi nel file .h, voglio rendere tale funzione in linea in più di un file .cpp che lo utilizza, quindi dovrei definire la funzione (da inline) in quel file .h e includerla a livello individuale File .cpp? Se sì, allora in questo caso dovresti usare la parola chiave inline?

CASO 3 (Definizione nel file di intestazione e dichiarazione nel file di origine)

Se il prototipo si trova in un file di intestazione, definizione in un file sorgente (in cui altre funzioni utilizzano la funzione inline), dove deve essere utilizzata la parola chiave inline?

  1. Nella dichiarazione nel file di intestazione
  2. Nella definizione nel file sorgente
  3. In entrambi
posta sk patra 22.08.2013 - 08:38
fonte

2 risposte

1

Hai chiesto la sintassi della parola chiave inline :

Caso 1

Esiste solo una definizione qui, quindi nessuna violazione ODR possibile e nessuna necessità di inline .

Caso 2

Basta scrivere il prototipo e la definizione nel file di intestazione come

inline int foo() { return 42; }

o qualsiasi altra cosa

Caso 3

Come il caso 1, non è chiaro il motivo per cui pensi che questa funzione sia in linea in primo luogo. Non utilizzare la parola chiave, non vi è alcun rischio di violazione ODR qui.

Ora sospetto che abbia voluto dire per chiedere come forzare il compilatore a generare chiamate inline alla tua funzione globale.

La inline parola chiave non costringe il compilatore a farlo. È stato solo un suggerimento e ora il suo unico effetto deterministico è sull'ODR (una regola di definizione).

La risposta generale è di alzare il livello di ottimizzazione e, se il compilatore non supporta l'inlining cross-module, rendere il corpo della funzione visibile in-line. Il compilatore può ancora decidere di non mettere in linea la chiamata di funzione anche se è visibile, ma l'ottimizzatore avrà l'opzione.

    
risposta data 22.08.2013 - 15:12
fonte
0

inline è NOT parte dell'interfaccia e agli utenti client non interessa se una funzione è in linea o meno. Fondamentalmente puoi inserire una parola chiave inline sia nella dichiarazione che nella definizione. Ma è preferibile metterlo nell'implementazione che è nella definizione.

Quindi, il resto 3 casi è banale. Puoi scegliere chiunque ti piaccia. Ma con la parola chiave in definizione è la mia preferita.

    
risposta data 22.08.2013 - 15:19
fonte

Leggi altre domande sui tag