Tout d'abord, l' inline
sur une spécification de la fonction est juste un soupçon. Le compilateur peut (souvent) d'ignorer complètement la présence ou l'absence d'un inline
de qualification. Cela dit, un compilateur peut incorporer une fonction récursive, autant qu'il peut dérouler une boucle infinie. Il suffit de placer une limite sur le niveau de "dérouler" la fonction.
Un compilateur optimisant pourrait tourner ce code:
inline int factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int f(int x)
{
return factorial(x);
}
dans ce code:
int factorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int f(int x)
{
if (x <= 1)
{
return 1;
}
else
{
int x2 = x - 1;
if (x2 <= 1)
{
return x * 1;
}
else
{
int x3 = x2 - 1;
if (x3 <= 1)
{
return x * x2 * 1;
}
else
{
return x * x2 * x3 * factorial(x3 - 1);
}
}
}
}
Dans ce cas, nous avons essentiellement inline à la fonction 3 fois. Certains compilateurs ne effectuer cette optimisation. Je me souviens de MSVC++ d'avoir un réglage pour ajuster le niveau de l'in-lining, qui seront réalisés sur les fonctions récursives (jusqu'à 20, je crois).