Quand faut-il écrire le mot-clé inline pour les fonctions et méthodes en C++ ?
Bonjour à tous ! Je suis un développeur C++ débutant, et je suis constamment tourmenté par la question du mot-clé inline. J'ai l'impression de comprendre qu'il « insère » le code de la fonction à l'endroit de l'appel pour éviter les frais généraux d'appel. Mais en pratique, je vois que les compilateurs modernes (GCC, Clang, MSVC) décident souvent eux-mêmes d'inliner une fonction ou non, même si je n'ai pas écrit inline. Et inversement, si j'écris inline, le compilateur peut l'ignorer et ne pas inliner.
Au final, je suis confus. Voici un exemple :
```cpp
// Fichier utils.h
int square(int x) {
return x * x;
}
// Fichier main.cpp
#include "utils.h"
int main() {
int a = square(5);
return 0;
}
```
Si j'inclus ce fichier d'en-tête dans plusieurs fichiers .cpp, l'éditeur de liens générera une erreur de définition multiple. On m'a dit qu'il fallait ajouter inline. Mais pourquoi ? Car square est une petite fonction, et le compilateur peut déjà l'inliner. Et si j'ajoute inline, qu'est-ce qui change ? Ou un autre cas : j'ai une grande fonction dans une classe. Si je