vaut-t-il la peine d'utiliser le mot-clé en ligne ou le compilateur est suffisamment intelligent pour savoir quand il doit être conforme à une fonction? P>
4 Réponses :
Le compilateur est assez intelligent et contient de multiples métriques pour déterminer si quelque chose vaut la peine d'être inlinité. Mais parfois, cependant, le développeur aura des connaissances sur la manière dont la demande sera exécutée et saura en ligne quelque chose que le compilateur ne fait pas automatiquement. Cependant, je ne ferais jamais de choses en ligne manuellement à moins d'avoir eu des points de repère et que vous avez constaté que l'inine améliorerait mes performances. P>
Vous pouvez en savoir plus sur la façon dont GCC utilise Inline . P>
Est-ce toujours la même chose traitée par le compilateur?
C'est toujours la peine d'être explicite sur l'intention. P>
Il convient également de noter que le compilateur n'a même pas besoin de faire en sorte que cela ne le pense pas non plus. P>
Oui, il est assez intelligent. Mais ce qui n'a fait aucun progrès au cours des 40 dernières années, c'est la manière dont les programmes sont construits. C'est toujours un fichier de code source à la fois. p>
Donc, pour obtenir une fonction inline dans plus d'un fichier .C vous mettez la définition de la fonction dans le fichier .h. Et si vous ne les marquez pas en ligne, la liaison se plaindre des multiples définitions. P>
+1, Inline code> Nowadays signifie "Autoriser plusieurs définitions". Le fait qu'il s'agisse également d'un indice du compilateur pour "faire appel à cette fonction rapide" est un effet secondaire sans rapport et non pertinent :-) Je pense que ce n'est pas que "la manière dont les programmes sont construits" n'a pas avancé - certains compilateurs / likers ont. Mais le dénominateur commun le plus bas, que la norme permet, n'a pas avancé.
Dire en ligne code> signifie "autoriser plusieurs définitions" est tout simplement faux. Cette question concerne le langage C, pas C ++. C n'a pas
extern inline code> fonctions, le mot clé
inline code> n'est pas valide sans
statique code> et plusieurs définitions d'une fonction ne sont jamais autorisées.
La norme dit p>
7.1.2 Spécificateurs de fonctions P>
2. Une déclaration de fonction (8.3.5, 9.3, 11.4) avec un spécificateur en ligne déclare une fonction inline. Le spécificateur en ligne indique à la mise en œuvre que la substitution en ligne de l'organe de fonction au point d'appel doit être préférée au mécanisme d'appel de fonction habituel. Une implémentation n'est pas nécessaire pour effectuer cette substitution en ligne au point d'appel; Cependant, même si cette substitution en ligne est omise, les autres règles relatives aux fonctions en ligne définies par 7.1.2 sont toujours respectées. P> blockQuote>
Donc j'habirais
en ligne code> à peut-être
code> dans html - il est bon d'utiliser la fermeture automatique
code> tout le temps. Mais on pourrait soutenir que presque tous le navigateur implémentations em> traitercode> et
code> exactement le même, que imo manque le point. < / p>Comme d'autres l'ont noté, cela n'est probablement pas très pertinent pour la valeur de performance dans ces jours-ci. Mais je pense que cela sert toujours bien comme un mot clé de transmission sémantique et d'intention. P>
Une remarque ne vaut pas la réponse: Si vous n'avez pas l'intention d'utiliser la fonction de l'extérieur de l'unité de compilation, le mot-clé "statique" fait plus pour aider le compilateur que "en ligne". Le compilateur peut alors par exemple en ligne indépendamment de la taille s'il existe un seul site d'appel.