2010-04-29 8 views
0

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

permet de dire 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; 
} 
+7

Mettre « en ligne » en face de la définition de la fonction. –

+3

Vous devez également placer la définition de la fonction dans un en-tête (ou la rendre disponible dans chaque unité de traduction ... –

+3

Gardez à l'esprit que le mot-clé 'inline' n'a généralement aucun effet si une fonction est inline ou non. Avec tout compilateur raisonnablement moderne, il vous permettra de définir la fonction à plusieurs endroits, à condition que toutes les définitions soient identiques (par exemple, vous pourriez avoir défini cela dans plusieurs en-têtes si c'était «inline») –

Répondre

4

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 va choisir d'ignorer votre requête s'il le veut ou le doit.

Une alternative est de faire votre fonction d'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; 
} 
+1

Les modèles de fonction ne sont pas nécessairement développés en ligne. – sbi

+2

Niether sont des fonctions «inline». Ceci est juste une approche alternative. –

+0

Libellé clarifié. –

4

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

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

inline dit que 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 d'appel de fonction) mais plus gros (le code est copié). This page is more in depth.

+0

Et le compilateur n'est pas obligé de l'intégrer s'il ne le fait pas Je ne me sens pas comme ça. Cela peut ou peut ne pas aider. –

3

Si cette définition de fonction apparaît à l'intérieur d'une définition class {}, elle est automatiquement en ligne.

Sinon, comme d'autres disent, mettre inline Infront.

8

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

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

Pour rendre la fonction inline utiliser 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 (par opposition à l'extérieur) rend en ligne.

Supposons que vous avez l'appel:

int f = maximum(3, 4, 5) 

La puissance du compilateur élargit 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, fonctions si inline vous donnent des raisons de commodité fonctionne avec les performances des macros C. Mais cela ne veut pas dire que vous devriez toujours les utiliser, dans la plupart des cas, le compilateur est mieux à même de décider quand des optimisations de ce type sont nécessaires et pourraient même ne pas honorer votre requête.

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