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

C++ Discussion :

Nouvelles fonctionnalités du C++11 [Tutoriel]


Sujet :

C++

  1. #21
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ce n'est pas un autre mécanisme, mais un cas particulier.
    Dans le FDIS(n3290), §8.5/16, §8.5.1/2 et §8.5.4 on voit que le vieux truc servant à initialiser s'appelle maintenant initializer-list et que le mécanisme est une List-Initialization (j'avoue, je peux simplifier: j'ai parcouru en vitesse)

    Après, le nouveau standard nous fournit maintenant un mécanisme pour intercepter ces initializer-list (std::initializer_list) dans nos constructeurs ou ailleurs quand des retransmissions non triviales sont requises (comme pour initialiser les éléments d'un conteneur que nous implémentons).
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  2. #22
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Au niveau de (petite faute de grammaire, au passage) :
    Citation Envoyé par gbdivers Voir le message
    Sizeof étendu [N2253]

    Dans le C++98, il n'est pas possible de faire référence dans sizeof à une données membres non statique. Le C++11 supprime cette limitation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct C {
       static T1 m1;
       T2 m2;
       void foo() const;
    };
     
    sizeof(C::m1); // ok
    C c;
    sizeof(c.m2); // ok
    sizeof(m2); // erreur en C++98, valide en C++11
    C::foo() { sizeof(m2); } // erreurC++98, valide en C++11
     
    sizeof(((C*) 0)->m); // hack possible pour contourner en C++98
    J'ai peut être mal compris ce point là, mais l'exemple de code me paraît louche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(m2); // erreur en C++98, valide en C++11
    N'est-ce pas plutôt C::m2 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(((C*) 0)->m); // hack possible pour contourner en C++98
    Il n'y a pas de variable m dans la classe C, j'imagine que tu voulais écrire m2.

    Sinon j'en profite aussi pour te signaler qu'il manque un mot dans cette phrase :
    Citation Envoyé par gbdivers Voir le message
    Le mot clé default peut être utilisé avec n'importe quelle fonction qui peut être générée automatiquement par le compilateur (son utilisation peut même être redondante). Le mot clé delete peut être utilisé avec n'importe quelle fonction. Il est ainsi possible d'éviter les conversions implicites des paramètres entrant :
    Quoi qu'il en soit, merci pour ces descriptions

  3. #23
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    @Kalith
    Merci, c'est corrigé

  4. #24
    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 : 49
    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
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Je suis d'avis d'utiliser le terme précis qui servira à traduire officiellement initializer-list. Je soupçonne qu'il n’apparaisse pas avant la traduction d'une prochaine mouture du TC++11PL. Je ne sais pas si Loic et Michel ont déjà leur petite idée sur le sujet ou non.
    Je ne suis sur aucun projet secret de ce type actuellement, et j'avoue ne pas avoir de bonne idée de traduction qui me vienne comme ça.

    Je pense que liste d'initialisation est déjà passé dans le "langage courant" pour l'initialisation des données membre avant le corps du constructeur, et qu'on ne peut plus le changer. Peut-être que si je devais traduire initializer-list, je partirais vers quelque-chose de plus verbeux, comme liste permettant l'initialisation, ou liste de valeurs initiales.
    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.

  5. #25
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Même en anglais c'est pas ça, car dans le nouveau cas, on ne peut pas vraiment parler de liste, non ?

    Sinon, on peut peut-être affiner avec des adjuvants comme implicite, explicite, primaire, déclarative, pre (pre-initialisation), je ne sais pas, mais c'est évident qu'il faut pouvoir faire la différence.

  6. #26
    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
    Points : 3 344
    Points
    3 344
    Par défaut
    Même en anglais c'est pas ça, car dans le nouveau cas, on ne peut pas vraiment parler de liste, non ?
    Pourquoi pas? C'est bien un conteneur qui liste des valeurs d'initialisation.

  7. #27
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Au temps pour moi, je confondais avec le fait de pouvoir initialiser des données membres non statiques dans la déclaration de la classe.

    Ben dans ce cas, autant appeler ça "liste d'initialiseur", c'est pas choquant, mais le mot n'existe pas en effet, peut être "liste d'initiateur", sinon, "liste d'affectation", "liste d'assignation".

  8. #28
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Liste d'affectation bof. D'assignation, non! (on n'assigne pas en informatique, on affecte)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #29
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Une traduction littérale, peut-être, alors : "Liste d'initialisateurs", moi je pense que c'est le terme que j'utiliserai, à part le terme anglais.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #30
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Un grand merci à gbdivers pour ce travail de documentation. Il me sera fort utile.
    Find me on github

  11. #31
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    Merci à l'auteur de ce fil passionnant.
    Espérons qu'il aura le temps de le compléter
    A noter, pour ceux qui en auraient l'utilité, ce tutoriel très bien fait, décrivant pas à pas comment compiler la version la plus récente de GCC sur une Ubuntu (Linux) 12.04

    http://solarianprogrammer.com/2012/0...-ubuntu-12-04/

  12. #32
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    C'est toujours en cours... selon mes dispos
    Je vais finaliser ça avant la fin d'année, en excluant la partie move semantic et prog concurrente, qui feront l'objet d'articles spécifiques

  13. #33
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Du coup, je viens transférer ce qui était déjà fait :
    * Les nouveaux types de caractères
    * Les espaces de noms inline
    * Les opérations atomiques (sera dans un article dédié)
    * La propagation des exceptions

  14. #34
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    A propos des nouvelles techniques d'initialisation, peut-être serait-il bien de commencer par montrer, dans une présentation pour des novices, à quel point elles fournissent une syntaxe uniforme et générale (comme le dit Stroustrup dans sa FAQ sur le C++11) de l'initialisation, et de mettre pour commencer en avant des séries d'exemples parallèles tels que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <map>
    #include <string>
    #include <vector>
    #include <list>
     
    class A {
        int a;
        std::string b;
    public:
        A()=default;
        A(int i, std::string s): a {i}, b {s} { };
    };
     
     
     
    int main()
    {
        int i  {34};
     
        int tab[]  {1,3,5};
     
        std::vector<int>  vec {1,3,5};
     
        std::list<int>  lst {23,679,32};
     
        std::map<int,std::string> mymap  { {1,"Jean"}, {2,"Albert"} };
     
        A objet1 {345,"essai"};
     
        A objet2 {}; //liste de paramètres vide d'où ici constructeur par défaut
     
        int * pData  {  new  int[4]   { i, 2, 97, 103 }  };
     
    }
    (à noter qu'un '=' entre la variable et la liste d'initialisation est parfois permis parfois exclu : pour mettre en valeur la généralité de la syntaxe, peut-être une règle de bonne programmation serait de l'omettre systématiquement, comme le recommande Scott Meyers dans son dernier pdf sur le C++11 [slide 50]).

  15. #35
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par ptyxs Voir le message
    peut-être serait-il bien de commencer par montrer à quel point elles fournissent une syntaxe uniforme et générale
    Ce n'est pas forcément un bien : dans ton exemple, en lisant rapidement, i ne se distingue pas des autres par sa nature scalaire. Cela pourrait tout aussi bien être un tableau d'un élément. Tu vas me dire, il suffit de regarder le type, mais si tu as un typedef...

  16. #36
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    J'ai rajouté aussi ça dans la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        int * pData  { new  int[4]   { i, 2, 97, 103 }   };

  17. #37
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    A noter aussi que l'initialisation uniforme en {} vient corriger une petite imperfection assez pénible du C++03 : on ne pouvait pas initialiser un tableau membre d'une classe directement dans la liste d'initialisation du constructeur ! Maintenant, on peut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct S {
       int a[3];
       S(int x, int y, int z) :a{x,y,z} { /* ... */ }; // solution to old problem
    };

  18. #38
    Membre averti
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Points : 439
    Points
    439
    Par défaut
    En ce qui concerne les listes d'initialisation, à noter aussi leur emploi autorisé dans un return : par exemple, une fonction du genre :

    std::vector<int> f(...)

    pourra contenir une ligne comme :


  19. #39
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    L'article (en cours de rédaction) a été mis au format Dvp. Il est donc possible de télécharger le pdf (en autre)

    Bonne lecture

    Nouvelles fonctionnalités du C++11 prises en charge dans gcc

  20. #40
    Membre éprouvé
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Points : 1 081
    Points
    1 081
    Par défaut
    "une classe avec une fonction vituelle mais un destructeur non virutel"
    Si vous ne savez toujours pas ce qu’est la récursivité, relisez cette phrase.

    Mon blog sur la programmation et l'informatique !

Discussions similaires

  1. Nouvelle fonctionnalité pour le tableau de bord ?
    Par guidav dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 10
    Dernier message: 08/02/2009, 16h58
  2. Les hebergeur bloquent t'ils les nouvelles fonctionnalité de Mysql5 ?
    Par berceker united dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 07/09/2007, 10h24
  3. Réponses: 2
    Dernier message: 16/12/2006, 10h56
  4. Réponses: 4
    Dernier message: 17/08/2006, 16h25

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