2012-07-17 9 views
6

cerco sempre di mantenere l'attuazione di fuori delle intestazioni, quindi per i modelli e le funzioni inline, faccio di solito qualcosa di simileDevo ripetere la parola chiave inline sull'attuazione funzione


// File.h 
inline bool foo() 

#include "File.hpp" 

// File.hpp 

inline bool foo() 
{ 
    return 1; 
} 

La mia domanda è, cosa ha da dire la specifica C++ sulla ripetizione della parola chiave inline per l'effettiva implementazione della funzione? (come mostrato in questo esempio)

Non voglio davvero farlo perché è complicato con molte e molte funzioni, e mentre il mio compilatore non si lamenta, mi chiedo se il compilatore accetta ancora il suggerimento in linea .

Qualcuno sa?

+0

E 'ancora deprecato? – agibalov

+2

Un po 'fuori tema, ma non dovresti fare affidamento sulla parola chiave _inline_, perché poiché l'ottimizzazione, una funzione dichiarata in linea potrebbe non essere una, e una funzione "normale" può essere effettivamente considerata come una in linea. – SingerOfTheFall

+1

Sono consapevole che è solo un suggerimento, sì – Tomas

risposta

4

Tendo a mettere inline il più lontano possibile dall'interfaccia poiché è un dettaglio di implementazione e non parte dell'interfaccia. Quindi: ometti il ​​primo inline nella dichiarazione. E allegalo solo alla definizione della funzione. Per l'inclusione di un compiler hpp gli ambiti sono irrilevanti rispetto a quelli in linea poiché i file sono trattati come concatenati. Vedere anche http://www.parashift.com/c++-faq/where-to-put-inline-keyword.html per una spiegazione più dettagliata.

4

È OK, ma inserire inline nel file di origine è ancora meno di un suggerimento, poiché le origini non sono generalmente visibili ad altre unità di traduzione. Se si implementa la funzione al di fuori dell'intestazione, il compilatore probabilmente non sarà in grado di inline comunque.

L'unico utilizzo pratico di inline, a mio parere, è di impedire la definizione multipla delle funzioni definite nell'intestazione.

+0

Non l'ho messo in un file sorgente, l'ho messo in un file che ho importato nell'intestazione, essenzialmente semplicemente inserendolo alla fine di quel file di intestazione – Tomas

+0

Impossibile che un compilatore sufficientemente intelligente inline la funzione al tempo di collegamento comunque? – millimoose

+0

Non sono sinceramente troppo sicuro di questo. Qualcuno sa quanto sia comune? – Tomas

Problemi correlati