J'aimerais avoir le plus d'avis possible sur cette question : quand utilisez-vous ou n'utilisez pas autoet decltype ? N'hésitez pas à détailler les raisons ou les cas. Ce afin de m'aider en réunissant le plus d'avis et d'opinions possibles.
Personnellement je n'utilise pas le tout auto, plus parce que j'ai du mal à changer qu'autre chose. Mais j'utilise quand même souvent auto et decltype :
- auto : je l'utilise quand le type est très long, souvent avec la ST(L) et ses noms template à rallonge en retour de fonction. Mais quand je sais ce que je vais manipuler bien sûr (des itérateurs, conteneurs, etc.). Je l'utilise aussi pour des types numériques qui peuvent varier dans le temps (passer de float à double par exemple), ça permet de gagner pas mal de temps !
- decltype : je l'utilise moins que le précédent mais lorsque je m'en sers c'est souvent avec auto (pas decltype(auto)), pour bien montrer que le type d'une variable doit absolument être le même que celui d'une autre.
EDIT : Je viens de perdre les 3/4 de mon post...
EDIT 2 : Avoir un +1 sur un post de 3 mots coupé en plein milieu... GG x)
N'empêche, dire que le type l est long mérite bien un +1
je l'utilise quand le type est très long, souvent avec l
:o)
Sinon, je mets auto quand la variable est initialisée avec une autre variable ou avec un retour de fonction. Dans les autres cas, j'appelle directement le constructeur T x{...}; et non pas auto x = T{...}.
Aussi dans les boucles sur intervalle (sauf si l'IDE décide de ne pas reconnaître le type... -_-).
Je ne le mets pas quand je veux une interface. À la place, je mets le type de l'interface.
Je ne l'utilise pas quand il y a std::reference_wrapper, sinon il faut mettre machin.get() partout. Je trouve ça regrettable en fait, j'espère que la proposition de surcharge de l'opérateur . va être accepté (pas du tout suivit le truc).
(D'ailleurs, je remplace souvent reference_wrapper par à un proxy rien que pour cette raison...)
decltype quand j'ai besoin de construire une variable du même type. Généralement, dans un alias (using Truc = decltype(machin)).
- auto : souvent pour les types qui peuvent changer (float, doubel notamment), presque toujours pour les variables initialisées par un retour de fonction (make_shared, make_unique, begin pour ne donner que des exemples de la SL) ;
- decltype : dans des arguments de fonction qui ont deux fois le même type (exemple : maFonction(UnTypeComplique::iterator first, decltype(first) last)), rarement en d'autres circonstances
- decltype(auto) : je n'ai jamais rencontré un cas de figure ou j'ai eu à l'utiliser, et je préfère l'éviter car je le trouve peu explicite, car il faut aller voir quels qualificateurs (const, volatile, référence) marquent la "variable source", ce qui est peu lisible. Je préfère dans ce cas réécrire auto const& par exemple.
- Edité par mehdidou99 24 mai 2015 à 18:18:47
Mehdidou99 - Plus on apprend, et euh... plus on apprend. | Ne lisez pas le cours de C++ d'OpenClassrooms ! Il est de mauvaise qualité. Essayez plutôt celui-là. Jeux (3D) en C++ ? Unreal Engine 4, c'est bien, mangez-en !
Merci à tous les deux, j'ai ajouté vos témoignages à l'article. Pour info, il se trouve sur ZdS mais est encore en bêta ; il faudra un compte pour ceux qui veulent le lire.
Comment visionner un article en bêta sur Zds (j'ai un compte) ?
- Edité par mehdidou99 24 mai 2015 à 19:16:16
Mehdidou99 - Plus on apprend, et euh... plus on apprend. | Ne lisez pas le cours de C++ d'OpenClassrooms ! Il est de mauvaise qualité. Essayez plutôt celui-là. Jeux (3D) en C++ ? Unreal Engine 4, c'est bien, mangez-en !
Mehdidou99 - Plus on apprend, et euh... plus on apprend. | Ne lisez pas le cours de C++ d'OpenClassrooms ! Il est de mauvaise qualité. Essayez plutôt celui-là. Jeux (3D) en C++ ? Unreal Engine 4, c'est bien, mangez-en !
Personnellement, je suis dans la même optique que @jo_link_noir, j'utilise auto quand je crée un élément qui est dépendant d'un autre. Pour decltype, j'ajouterai une autre petite utilisation que pour la création d'un alias : une dépendance de type mais où la première utilisation ne nous donne pas l'info. Cas typique :
std::vector<bidule> v;
//...
for(decltype(v)::size_type i = 0; i < v.size(); ++i){
}
Après, dans ce cas, on aura effectivement envie de définir le type avant avec un using.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Discord NaN. Mon site.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C