3 Réponses :
Parce que c'est une fonction "en ligne". Les fonctions en ligne peuvent être incluses des en-têtes autant de fois que vous le souhaitez et ne causent pas d'erreurs de définition de définition en double. P>
Le compilateur essaiera également de les apporter en ligne, dans votre exemple ci-dessus, le compilateur sera essayer em> et éliminer l'appel au constructeur complètement. P>
Les fonctions en ligne sont des exceptions à la "règle d'une définition": vous êtes autorisé à avoir des implémentations identiques d'eux dans plus d'une unité de compilation. Les fonctions sont en ligne si elles sont déclarées inline code> ou implémentées dans une définition de classe. P>
Es-tu sûr de ça? Si je le compile et regarde le démontage, je vois clairement une instruction "appel". Donc, pas d'inlinage. De plus, je peux déclarer des fonctions récursives dans la définition de la classe, les inclure plusieurs fichiers .CPP et obtenir une erreur de liaison. Comment peuvent-ils être inline? (Peut-être un comportement spécifique aux États membres, cependant)
@nikie: Même s'il peut y avoir une instruction d'appel, les fonctions sont traitées différemment par la liaison, voir le lien de ma réponse pour plus de détails.
@nikie "Fonction en ligne" ne signifie pas que les appels sont inline. Cela signifie simplement qu'ils obtiennent un traitement spécial par la liaison afin que plusieurs définitions sont autorisées dans le programme. Pour que les appels soient inlinés, cela soit nécessaire - car ce n'est qu'alors, plusieurs TU peuvent voir le code et non seulement un tu. Mais ce n'est pas suffisant - le compilateur peut toujours utiliser des instructions d'appel simples.
@nikie Le compilateur n'est jamais obligé de rien aligner physiquement. -
@Tall: Mon erreur. Je pensais que "la fonction en ligne" signifiait que les appels vers la fonction devaient être inlinés. Merci pour la clarification.
Je dois dire que j'utilise le mot-clé code> en ligne code> plus fréquemment pour ses propriétés de liaison que pour les performances!
Merci beaucoup pour l'explication précise;)
@Ashleysbrain: Je l'utilise seulement i> pour ça!
Les fonctions de membre avec la mise en œuvre à l'intérieur de la définition de la classe sont traitées comme des fonctions en ligne. Les fonctions en ligne sont exemptées d'une règle de définition. P>
Plus précisément lorsque la lieur voit deux fonctions en ligne avec la même signature, elle les traite comme si elle est la même fonction et en choisit simplement l'une d'elles. Cela peut diriger à vraiment étrange difficile à détecter les problèmes . P>
Voici une autre réponse sur Inline et la règle d'une définition one: Stackoverflow.com/Questtions/908830/...
BTW, Britneyspears a une faible liaison dans votre code. Comme dans la vraie vie :)