OVH Cloud OVH Cloud

inline, utilisation

21 réponses
Avatar
none
Quelles sont les motivations qui peuvent me pousser à utiliser des
méthodes inline ?
Par exemple, j'ai une classe avec des membres privés dont je déclare des
accesseurs (getFoo, setFoo)

public:
int getFoo() const;
void setFoo(int value);
private:
int m_foot;

Est-il judicieux de déclarer getFoo et setFoo en inline d'emblée, en
sachant que ce sont des fonctions au contenu trivial et petit (getFoo se
contente de renvoyer m_foot par exemple) ?

Merci pour vos conseils avisés

1 réponse

1 2 3
Avatar
Jean-Marc Bourguet
loufoque writes:


Ceci est un metaprogramme qui genere une serie de fonctions


Justement, non.
C'est le but de l'utilisation de inline dans ce cas.


Non. inline a deux effets: permettre la definition d'une fonction dans
plusieurs unites de compilation, indiquer au compilateur qu'on
aimerait bien qu'il daigne essayer de supprimer remplacer les appels a
la fonction en les remplacant par le corps de la fonction correctement
modifie pour ne pas changer le comportement visible.

Ce n'est pas un metaprogramme qui retourne la factorielle de
l'argument template: le resultat n'est pas utilisable a la
compilation.


Cela remplace Factorielle<5>() par 1.0*1*2*3*4*5


Ca ne remplace certainement pas Factorielle<5>() par quoi que ce soit.
Ca n'agit pas au niveau textuel ni meme des symboles. Ca defini une
fonction comme

inline double Factorielle<5>()
{
return Factorielle<4>() * 5 ;
}

Et comme elle fait des calculs constants il y a plus de chances
qu'elle soit reellement inlinee qu'un appel comme factorielle(5) mais
ce n'est pas obligatoire (et factorielle(5) peut etre inline -- Sun CC
me le fait bien pour factorielle(4) mais pas pour factorielle(5))

Note qu'une partie du gain de perf optenable par la metaprogrammation
resulte du fait qu'on peut generer des fonctions plus facilement
inlinable, mais la metaprogrammation est soit c'est la generation de
code (reorganiser du code avec les expressions templates pour changer
le flux de donnees, pouvoir utiliser Fact<5> plutot que 120 comme
taille d'un tableau de taille fixe contenant les permutations de 5
objets, ...)

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


1 2 3