27 votes

Modèle C ++ et en ligne

Quand j'écris une simple (non du modèle) de la classe, si l'implémentation de la fonction est fourni "droit de place", il est automatiquement considéré comme inline.

class A {
   void InlinedFunction() { int a = 0; }
   // ^^^^ the same as 'inline void InlinedFunction'
}

Quoi dire de cette règle lorsque l'on parle de modèle à base de classes?

template <typename T> class B {
   void DontKnowFunction() { T a = 0; }
   // Will this function be treated as inline when the compiler
   // instantiates the template?
};

Aussi, quel est le inline de la règle de la non-modèle imbriqué fonctions, comme

template <typename T> void B::DontKnowFunction() { T a = 0; }

template <typename T> inline void B::DontKnowFunction() { T a = 0; }

Qu'arriverait-il dans le premier et dans le second cas ici?

Je vous remercie.

11voto

Puisque lorsque vous instanciez vous obtenez une classe, cette fonction est comme une fonction membre ordinaire. Il est défini dans cette classe, donc la fonction est automatiquement en ligne.

Mais cela n'a pas vraiment d'importance ici. Vous pouvez de toute façon définir des modèles de fonction ou des membres de modèles de classe dans un programme - vous n'avez pas besoin de inline pour en informer le compilateur comme dans le cas non-modèle.

4voto

Puppy Points 90818

Pour autant que je sache, les fonctions modèles sont automatiquement intégrées. Cependant, la réalité est que la plupart des compilateurs modernes ignorent régulièrement le qualificatif en ligne. L'heuristique d'optimisation du compilateur fera très probablement un bien meilleur choix des fonctions à intégrer qu'un programmeur humain.

1voto

RC. Points 15804

Le mot clé en ligne n'est pas une "règle". C'est simplement une suggestion / astuce pour le compilateur et ce qu'il en fait dépend entièrement de lui et de sa mise en œuvre. Dans cet esprit, il n'est pas possible de savoir ce qui se passera avec vos exemples. Le compilateur peut en fait tous, certains ou aucun d'entre eux.

Prograide.com

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.

Powered by:

X