Oh, l'homme, l'une de mes bêtes noires.
inline
est plus de l' static
ou extern
qu'une directive indiquant au compilateur de vos fonctions inline. extern
, static
, inline
sont de liaison directives, utilisé presque exclusivement par l'éditeur de liens, pas le compilateur.
Il est dit qu' inline
conseils pour le compilateur que vous pensez que la fonction doit être insérée. Qui peut avoir été le cas en 1998, mais une décennie plus tard, le compilateur a besoin d'aucun de ces conseils. Ne pas oublier les humains sont généralement faux quand il s'agit de l'optimisation de code, de sorte que la plupart des compilateurs plat ignorer le "conseil".
static
la variable nom de la fonction/ne peut pas être utilisé dans d'autres unités de compilation. L'éditeur de liens doit assurez-vous de ne pas utiliser accidentellement un définis de manière statique variable/fonction à partir d'une autre unité de compilation.
extern
utilisation de cette variable nom de la fonction/dans cette unité de compilation, mais ne venez pas vous plaindre si elle n'est pas définie. L'éditeur de liens tri et assurez-vous tout le code qui a essayé d'utiliser certains extern symbole a son adresse.
inline
cette fonction sera définie dans plusieurs unités de compilation, ne vous inquiétez pas à ce sujet. L'éditeur de liens doit s'assurer que toutes les unités de compilation utiliser une seule instance de la variable/fonction.
Note: Déclarer des modèles en direct est sans valeur. Ils ont le lien sémantique en ligne déjà.
Donc des réponses précises à vos questions:
- Quand devrais-je écrire le mot-clé "inline" pour une fonction/méthode en C++?
Seulement quand vous voulez la fonction définie dans un en-tête. Plus exactement que lorsque la définition de la fonction peut apparaître dans plusieurs unités de compilation. C'est une bonne idée de définir petite (comme dans un liner) des fonctions dans le fichier d'en-tête, car il donne le compilateur plus d'informations pour travailler avec lors de l'optimisation de votre code. Il augmente également le temps de compilation.
- Quand devrais-je pas écrire le mot-clé "inline" pour une fonction/méthode en C++?
N'ajoutez pas en ligne lorsque vous pensez que votre code sera exécuté plus rapidement si le compilateur inlines.
- Quand le compilateur ne pas savoir quand faire une fonction/méthode 'inline'?
Généralement, le compilateur sera capable de faire mieux que vous. Cependant, le compilateur n'a pas la possibilité de code en ligne si elle n'a pas la définition de la fonction. Dans au maximum le code optimisé généralement toutes les méthodes privées sont inline si vous demandez pour elle ou pas.
Un côté pour empêcher l'in-lining dans GCC utiliser __attribute__(( noinline ))
et dans visual studio __declspec(noinline)
.
- Importe-t-il si une application multithread quand on écrit 'inline' pour une fonction/méthode?
Le Multithreading n'affecte pas l'in-lining, en quelque sorte.