Question

Je suis confus sur la façon de faire des fonctions en ligne dans C ++ ....

permet de dire que cette fonction. comment serait-il tourné vers une fonction en ligne

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
Était-ce utile?

La solution

Comme d'autres l'ont dit, vous pouvez utiliser le mot-clé inline pour indiquer au compilateur que vous voulez que votre fonction inline. Mais le mot-clé inline est juste un compilateur indice . Le compilateur peut et a choisi d'ignorer votre demande si elle veut ou a besoin.

Une autre solution consiste à faire fonctionner votre un modèle de fonction, qui sera souvent soufflé en ligne:

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;
}   

Autres conseils

Pour le transformer en une fonction en ligne que vous devez faire deux choses:

  1. le déclarer en ligne en utilisant inline mot-clé.
  2. Assurez-vous que le définition de cette fonction est visible dans chaque unité de traduction où il est utilisé. En général, cela signifie que vous devez mettre toute la définition de la fonction dans un fichier d'en-tête.

Pour poster réponse Neils comme une réponse réelle:

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

Si cette définition de fonction apparaît dans une définition de class {}, alors il est automatiquement en ligne déjà.

Dans le cas contraire, comme d'autres disent, mis infront inline.

Pour utiliser la fonction en ligne le mot-clé en ligne:

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;
}

Si la fonction est un membre d'une classe / struct puis définir simplement à l'intérieur de la classe (comme à l'extérieur apposed) en fait en ligne.

Disons que vous avez l'appel:

int f = maximum(3, 4, 5)

La puissance du compilateur étend l'appel à quelque chose comme:

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

Il y a certains frais généraux pour appeler une fonction, si les fonctions inline vous donnent la commodité des fonctions ainsi que les performances des macros C. Mais cela ne veut pas dire que vous devez toujours les utiliser, dans la plupart des cas, le compilateur est mieux décider quand des optimisations comme celle-ci sont nécessaires et peut-être même pas honorer votre demande.

Vous pouvez en savoir plus sur les fonctions inline et comment (et quand) pour les utiliser à C ++ FAQ Lite et ce GotW

inline indique juste le compilateur que vous voulez que le code de fonction copié partout où il est refernece, il rend le code un peu plus rapide (pas de frais généraux d'appel de fonction), mais plus grand (le code est copié). Cette page est plus en profondeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top