Fonctions en ligne en C++ - inline

26 Sep 2019 26 Sep 2019 8894 vues ESSADDOUKI Mostafa 3 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

La fonction inline est l'une des fonctionnalités importantes de C++. Lorsqu'un programme exécute un appel de fonction, le processeur stocke l'adresse de retour, copie les arguments sur la pile, puis transfère le contrôle à la fonction. Ce mécanisme génère une surcharge qui peut devenir significative pour de très petites fonctions appelées fréquemment.

Fonction inline

Une fonction inline est une fonction dont le code est inséré directement à chaque point d'appel par le compilateur, au lieu d'être exécuté via un saut. Cela élimine la surcharge liée à l'appel classique.

Syntaxe

   
Syntaxe C++
inline type_retour nomFonction(liste des paramètres) {
    // corps de la fonction
}
Attention

inline est une requête adressée au compilateur, pas une commande. Le compilateur peut ignorer cette demande dans plusieurs situations : fonction contenant une boucle, des variables statiques, une récursion, une instruction switch ou goto, ou un type de retour non-void sans instruction return.

Avantages et inconvénients

✅ Avantages❌ Inconvénients
Supprime la surcharge d'appel de fonctionAugmente la taille de l'exécutable (duplication du code)
Évite les opérations de pile (push/pop des arguments)Consomme davantage de registres CPU
Permet des optimisations contextuelles au compilateurPeut réduire le taux de réponse du cache instruction
Utile pour les systèmes embarqués (petites fonctions)Toute modification force la recompilation de tous les sites d'appel

Fonction inline et classes

Toutes les fonctions définies dans le corps d'une classe sont implicitement inline. Pour déclarer explicitement une fonction inline définie en dehors de la classe, on utilise le mot-clé inline à la fois dans la déclaration et dans la définition.

  Exemple n°1

#include <iostream>
using namespace std;

class Voiture {
private:
    int Id;
    double Vitesse;
public:
    Voiture();
    inline void rouler(double);
};

inline void Voiture::rouler(double v) {
    Vitesse += v;
    cout << "Votre vitesse est " << Vitesse << endl;
}

Voiture::Voiture() {
    Id = 1;
    Vitesse = 240;
}

int main() {
    Voiture v1;
    v1.rouler(24);
    return 0;
}
Sortie
Votre vitesse est 264
Bon à savoir

Les fonctions virtuelles ne peuvent pas être inlinées : un appel virtuel est résolu au moment de l'exécution (runtime), alors que l'inlining est effectué à la compilation. Ces deux mécanismes sont incompatibles.

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.