Pourquoi devrais-je faire quelque chose comme ceci:
inline double square (double x) { return x*x;}
au lieu de
double square (double x) { return x*x;}
Est-il une différence?
Pourquoi devrais-je faire quelque chose comme ceci:
inline double square (double x) { return x*x;}
au lieu de
double square (double x) { return x*x;}
Est-il une différence?
L'ancien (à l'aide d' inline
) permet de mettre cette fonction dans un fichier d'en-tête, où il peut être inclus dans plusieurs fichiers source. À l'aide de inline
rend l'identifiant dans le fichier de la portée, à l'instar de déclarer static
. Sans l'aide d' inline
, vous obtenez un multiple définition d'un symbole d'erreur de l'éditeur de liens.
Bien sûr, c'est en plus de l'astuce pour le compilateur que la fonction doit être compilé inline où il est utilisé (en évitant un appel de fonction, les frais généraux). Le compilateur n'est pas nécessaire d'agir sur l' inline
de l'indice.
Oui il y a une différence. http://www.parashift.com/c++-faq-lite/inline-fonctions.html#faq-9.1.
Lorsque vous spécifiez qu'une fonction inline, vous en êtes la cause, le compilateur de mettre le code de la méthode dans l'endroit où il est appelé.
void myfunc() {
square(2);
}
est identique à
void myfunc() {
2 * 2;
}
L'appel d'une fonction qui est bon pour le code de la clarté, mais lorsque cette fonction est appelée l'état local doit être poussé à la pile, un nouveau local de l'état de la configuration, de la méthode, et quand c'est fait à l'état antérieur doit être sauté. C'est beaucoup de frais généraux.
Maintenant, si vous votre niveau d'optimisation, le compilateur va prendre des décisions comme déroulage de boucles ou l'in-lining fonctions. Le compilateur est libre d'ignorer la ligne de déclaration.
De Wikipedia: fonction Inline est une fonction sur laquelle le compilateur a été demandé d'effectuer inline expansion. En d'autres termes, le programmeur a demandé que le compilateur insérer le corps de la fonction dans chaque endroit que la fonction est appelée, plutôt que de générer du code pour appeler la fonction dans le seul endroit où il est défini. Les compilateurs ne sont pas tenus de respecter cette demande.
inline
fonctionne bien avec le concept de la procédure d'abstraction:
inline double square (double x) { return x*x;}
int squareTwice(double x) {
double first = square(x);
double second = square(x);
return first * second;
}
Le ci-dessus est fondamentalement semblable à la suivante:
int squareTwice(double x) {
double first = x*x;
double second = x*x;
return first * second;
}
Cela arrive parce que quand le compilateur-cylindres en ligne développe un appel de fonction, le code de fonction est insérée dans l'appelant flux de code; par conséquent, il peut être plus facile sur le plan procédural résumé le deuxième exemple pour le premier exemple.
Procédure d'abstraction permet de briser une routine en plus petits sous-programmes qui sont beaucoup plus facile à lire (même si cela peut être un choix de style).
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.