Mis à part le fait qu'il n'y a pas d'appel (et donc pas de frais associés, comme paramètre de préparation avant l'appel et le nettoyage après l'appel), il y a un autre avantage important de l'in-lining. Lorsque le corps de la fonction est inline, c'est le corps peut être ré-interprété dans le contexte spécifique de l'appelant. Cela pourrait permettre immédiatement le compilateur pour plus de réduire et d'optimiser le code.
Pour un exemple simple, cette fonction
void foo(bool b) {
if (b) {
// something
}
else {
// something else
}
}
aura besoin réel de branchement si elle est appelée en tant que non-fonction inline
foo(true);
...
foo(false);
Toutefois, si les appels sont inline, le compilateur sera immédiatement en mesure d'éliminer la ramification. Essentiellement, dans le cas ci-dessus inline permet au compilateur d'interpréter l'argument de fonction comme une constante de compilation (si le paramètre est une constante de compilation) - quelque chose qui n'est généralement pas possible avec les fonctions inline.
Cependant, il n'est pas même à distance se limite à ça. En général, les possibilités d'optimisation de permis de inline sont nettement plus loin. Pour un autre exemple, lorsque le corps de la fonction est incorporé dans le spécifique de l'appelant contexte, le compilateur dans le cas général sera en mesure de propager l'connu aliasing relations présentes dans le code d'appel dans la fonction inline code, rendant ainsi possible d'optimiser le code de fonction mieux.
Encore une fois, les exemples sont nombreux, tous issus de la base fait que inline appels sont immergés dans le spécifique de l'appelant le contexte, ainsi l'activation des différentes inter-contexte optimisations, ce qui ne serait pas possible avec les non-inline calles. Avec l'in-lining, vous obtiendrez de nombreuses versions de l'original de votre fonction, chaque version est adapté et optimisé individuellement pour chaque appelant contexte. Le prix de ce qui est, de toute évidence, le danger potentiel de l'augmentation du code, mais si utilisé correctement, il peut offrir de notables avantages de performance.