Domanda

Sono confuso su come effettuare le funzioni inline in C ++ ....

diciamo questa funzione. Come sarebbe rivolto a una funzione inline

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
È stato utile?

Soluzione

Come altri hanno detto, è possibile utilizzare la parola chiave inline per dire al compilatore che si desidera la vostra funzione inline. Ma la parola chiave inline è solo un compilatore suggerimento . Il compilatore può e ha scelto di ignorare la richiesta, se vuole o ha bisogno di.

Un'alternativa è quella di rendere la vostra funzione di un modello di funzione, che sarà spesso saltato fuori linea:

template<class Val>
Val maximum( Val x, Val y, Val z )
{
   Val max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   

Altri suggerimenti

Al fine di trasformarlo in una funzione inline è necessario fare due cose:

  1. dichiararla in linea utilizzando inline parola chiave.
  2. Assicurarsi che il definizione di questa funzione è visibile in ogni unità di traduzione in cui viene utilizzato. Questo normalmente significa che si deve mettere l'intera definizione della funzione in un file di intestazione.

Per inviare Neils risposta come una risposta reale:

inline int maximum(int x, int y, int z)
....

Se quella definizione di funzione appare all'interno di una definizione class {}, allora è automaticamente in linea già.

In caso contrario, come altri dicono, put inline fronte.

Per rendere la funzione inline utilizzare la parola chiave inline:

inline int maximum( int x, int y, int z ) // note the inline keyword
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}

Se la funzione è un membro di una classe / struct poi semplicemente definente all'interno della classe (come apposto all'esterno) lo rende in linea.

Diciamo che avete la chiamata:

int f = maximum(3, 4, 5)

La potenza compilatore espande la chiamata a qualcosa di simile:

int max = x;
if ( y > max )
   max = y;
if ( z > max )
   max = z;
int z = max;

C'è un certo overhead per chiamare una funzione, in modo da funzioni inline offrono la comodità di funzioni con le prestazioni di C macro. Ma questo non vuol dire che si dovrebbe sempre usarli, nella maggior parte dei casi il compilatore è migliore a decidere quando sono necessarie ottimizzazioni come questo e potrebbe anche non onorare la vostra richiesta.

Si può leggere di più su funzioni inline e come (e quando) per usarle a C ++ FAQ Lite e questo GotW

inline solo dice al compilatore che si desidera che il codice funzione copiato in tutto il mondo è refernece, rende il codice un po 'più veloce (nessuna funzione di chiamata in testa), ma più grande (il codice viene copiato). Questa pagina è più in profondità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top