IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

C++11 : Utilisation du mot clé auto


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut C++11 : Utilisation du mot clé auto
    Je viens de lire toute la discussion (c++11), et bien que loin d'être au niveau pour en parler sereinement, je m'intéresse de prêt à la norme tout simplement parce que je vais être à jour avec les meilleurs outils avant de concevoir, et produire des codes avec la meilleure rigueur/propreté (qualité) possible (ce qui est loiiiin d'être le cas ).

    J'ai quelques questions concernant le mécanisme d'inférence de type et la "redéfinition" du mot-clé auto :

    Est-ce quelque chose à utiliser les yeux fermés ou est-ce que cela a été mis en place pour des cas bien spécifiques comme quand on manipule des templates par exemple ?

    J'ai entendu dire que la résolution de type ne coutait pas très cher à la compilation : et sur un code d'1 million de lignes qui l'utiliserait partout ?

    J'ai un peu de mal à me repérer dans la norme, donc ce n'est pas une information que j'ai réussi à trouver tout seul pour l'instant, si vous aviez en plus le paragraphe où il en est question...)

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Kaamui Voir le message
    Est-ce quelque chose à utiliser les yeux fermés ou est-ce que cela a été mis en place pour des cas bien spécifiques comme quand on manipule des templates par exemple ?
    Je ne vois pas de raisons de s'en priver quand c'est plus clair.

    J'ai entendu dire que la résolution de type ne coutait pas très cher à la compilation : et sur un code d'1 million de lignes qui l'utiliserait partout ?
    Si tu specifies le type explicitement, il va falloir le parser et le comparer au type de l'expression utilisee pour initialiser. Ca ne m'etonnerait pas que ce soit moins couteux de deduire le type a utiliser du type de l'expression.

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Lors des récentes conférences Going Native, Herb Sutter a dit qu'actuellement ils en sont à cet avis : utilisez auto autant que vous le pouvez, sauf quand c'est plus clair d'avoir le type précis.

    D'après lui et les autres du panel, il y a beaucoup d'avantages à avoir des auto autant que possible, notamment ça limite à mort le code à retoucher lors de modifications de types, qu'ils soient template ou pas.

    D'ailleurs, comme le souligne Jean Marc, il y a beaucoup de cas ou tu dois répéter des types dans la même expression, le plus courant étant l'assignation par construction ou il y a le même type des deux cotés de l'opérateur. Utiliser auto simplifie à mort ce code type de code.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Lors des récentes conférences Going Native, Herb Sutter a dit qu'actuellement ils en sont à cet avis : utilisez auto autant que vous le pouvez, sauf quand c'est plus clair d'avoir le type précis.

    D'après lui et les autres du panel, il y a beaucoup d'avantages à avoir des auto autant que possible, notamment ça limite à mort le code à retoucher lors de modifications de types, qu'ils soient template ou pas.

    D'ailleurs, comme le souligne Jean Marc, il y a beaucoup de cas ou tu dois répéter des types dans la même expression, le plus courant étant l'assignation par construction ou il y a le même type des deux cotés de l'opérateur. Utiliser auto simplifie à mort ce code type de code.
    Je n'ai pas encore vraiment regardé à auto, mais, est ce que cela veut dire qu'un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class MaClass
    {
        public:
            MaClass(auto const & rhs);
            auto operator = (auto const & rhs);
    };
    est a priori valide
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    @koala01: J'ai pas revérifié, mais de mémoire je crois que c'est valide si il n'y a qu'une instruction return dans le corps de la fonction, sinon c'est plus compliqué (il faut rajouter un -> decltype(/*...*/) à la fin du prototype). L'utilisation la plus directe serait pour les itérateurs. L'utilisation avec un decltype sera surment pour remplacer l'utilisation du protocole result_of.

  6. #6
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    koala01>


    Heu non ce n'est pas valide du tout, du moins pas dans C++11 (à ce que je sache) mais je parlais de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    auto objet = MaClasse(); // pour faire simple
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse objet = MaClasse(); // ça reste simple mais on imagine facilement un équivalent compliqué...

    La syntaxe que tu indiques suppose que les fonctions avec des auto soient en fait template. Il me semble que Dave Abrahams avait proposé quelque chose comme ça pour implicitement permettre les lambda polymorphique.

    Mais c'est clairement pas pour cette version ci.

  7. #7
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    @koala01: J'ai pas revérifié, mais de mémoire je crois que c'est valide si il n'y a qu'une instruction return dans le corps de la fonction, sinon c'est plus compliqué (il faut rajouter un -> decltype(/*...*/) à la fin du prototype). L'utilisation la plus directe serait pour les itérateurs. L'utilisation avec un decltype sera surment pour remplacer l'utilisation du protocole result_of.
    quelque part dans le draft y'a des exemple de cela...

    struct A {
    char g();
    template<class T> auto f(T t) -> decltype(t + g())
    { return t + g(); }
    };
    ...mais à quoi sert le decltype ici, plus précisément ?

    Lors des récentes conférences Going Native, Herb Sutter a dit qu'actuellement ils en sont à cet avis : utilisez auto autant que vous le pouvez, sauf quand c'est plus clair d'avoir le type précis.
    - quand est-ce que c'est plus clair d'avoir le type précis ? Non parce que j'imagine un code remplis autant que possible d'auto, bah...ça allège pas la lecture quand même, ça gène personne ça ?

    (par exemple, on doit reprendre un code de quelqu'un pour le faire évoluer ou le maintenir, mais quand à chaque fois qu'on appelle un itérateur il faut chercher le type en trouvant le type de la donnée...ça aide pas quand même...)

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            auto operator = (auto const & rhs);
    };
    Ça avait été proposé (par Bjarne Stroustrup et Gaby Dos Reis, si j'ai bonne mémoire), comme une manière de définir un template simplement, mais n'avait pas été retenu. Je ne sais plus précisément les raisons. Probablement trop novateur pour l'époque. Peut-être que ça reviendra dans le futur ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation abusive mot clé final
    Par jnmlme dans le forum Langage
    Réponses: 9
    Dernier message: 10/10/2006, 08h53
  2. Réponses: 2
    Dernier message: 27/09/2006, 10h37
  3. Question sur l'utilisation du mot réservé static
    Par flash2590 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 00h20
  4. Variables automatiques et mot clé auto, variables register.
    Par Évariste Galois dans le forum C++
    Réponses: 6
    Dernier message: 11/08/2005, 20h30
  5. [Débutant] Utilisation du mot clé ASSERT
    Par analysiz dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo