Partage
  • Partager sur Facebook
  • Partager sur Twitter

C++, auto, decltype et déduction de types

Venez donnez votre point de vue

    24 mai 2015 à 17:06:37

    Bonjour à tous,

    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.

    Merci d'avance à tous,

    Une gentille programmeuse gantée.

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2015 à 17:10:40

      C'est pour ton article sur auto/decltype ? :D
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2015 à 17:13:15

        gbdivers a écrit:

        C'est pour ton article sur auto/decltype ? :D

        Chut, tu va dévoiler mon identitée secrète. :D

        Oui. Je me suis dis que sur OC j'aurais un plus grande visibilité et donc la possibilité de récolter plus d'avis.

        -
        Edité par GlovedGirl 24 mai 2015 à 17:13:37

        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2015 à 17:22:26

          Te connaissant, tu dois bien avoir un avis sur la question.

          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2015 à 17:26:41

            Wow, tellement de drama ici !

            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)

            -
            Edité par zeFresk 24 mai 2015 à 17:36:18

            • Partager sur Facebook
            • Partager sur Twitter
            La flemme vaincra.
              24 mai 2015 à 18:09:34

              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)).

              -
              Edité par jo_link_noir 24 mai 2015 à 18:09:46

              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2015 à 18:13:15

                Salut ! Mon avis :

                - 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

                • Partager sur Facebook
                • Partager sur Twitter
                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 !
                  24 mai 2015 à 18:15:47

                  @jo_link_noir : Merci pour ce fou rire :lol:
                  • Partager sur Facebook
                  • Partager sur Twitter
                  La flemme vaincra.
                    24 mai 2015 à 18:30:55

                    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.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mai 2015 à 19:08:14

                      GlovedGirl a écrit:

                      Te connaissant, tu dois bien avoir un avis sur la question.

                      Et non. Pour une fois, je n'ai rien de plus à ajouter :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mai 2015 à 19:11:02

                        gbdivers a écrit:

                        GlovedGirl a écrit:

                        Te connaissant, tu dois bien avoir un avis sur la question.

                        Et non. Pour une fois, je n'ai rien de plus à ajouter :)

                        Tu dois bien avoir quelques citations de gourous alors. :D

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mai 2015 à 19:15:46

                          Comment visionner un article en bêta sur Zds (j'ai un compte) ?

                          -
                          Edité par mehdidou99 24 mai 2015 à 19:16:16

                          • Partager sur Facebook
                          • Partager sur Twitter
                          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 !
                            24 mai 2015 à 19:20:45

                            Il faut regarder dans le forum sur les sujets en bêta et tu tombe sur celui-là.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 mai 2015 à 19:25:37

                              "les auto, c'est bien, mangez-en". Ca ira ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 mai 2015 à 19:27:44

                                Merci, j'ai trouvé tout seul finalement :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                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 !
                                  24 mai 2015 à 19:30:18

                                  gbdivers a écrit:

                                  "les auto, c'est bien, mangez-en". Ca ira ?

                                  Parfait. :D

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 mai 2015 à 12:33:57

                                    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.

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                                    C++, auto, decltype et déduction de types

                                    × 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.
                                    • Editeur
                                    • Markdown