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++0x] Initializer lists et «foo f{};» vs «new foo{};»


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut [C++0x] Initializer lists et «foo f{};» vs «new foo{};»
    Bonjour à tous,

    Comme je l'ai dit ici, j'ai compilé GCC 4.4 qui offre dores et déjà d'utiliser les listes d'initialisation.

    J'ai un autre problème :
    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
     
    struct integer
    {
        int i;
    };
     
    struct foo1
    {
        double d;
        int i;
    };
     
    struct foo2
    {
        double d;
        integer i;
    };
     
    int main(int argc, char **argv)
    {
        int i1 = 0;
        integer i2{0};
     
        foo1 f1{3.2, i1}; //ok
        new foo1{3.2, i1}; //ok
     
        foo2 f2{3.2, i2}; //ok
        new foo2{3.2, i2}; //error, why?
     
        return 0;
    }
    Dans le main(), les premières lignes commentées compilent, mais pas la dernière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    main.cpp:51: error: could not convert '{3.20000000000000017763568394002504646778106689453e+0, i2}' to 'foo2'
    D'après vous, c'est un bug que je dois notifier aux dev de GCC, ou c'est standard ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et comme ceci ?
    Code C++0x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        foo2 f2{3.2, {i2}};
        new foo2{3.2, {i2}};
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Non, même punition

    Devant l'incohérence frappante de cet exemple, j'ai décidé d'écrire ce rapport de bug : http://gcc.gnu.org/bugzilla//show_bug.cgi?id=37740
    Pour l'instant je ne me suis pas (encore) fait jeter, alors on verra bien !
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Peut-être que c'est parce qu'il n'y a pas de constructeur pour foo2 au moment du new ?

    new foo2{3.2, i2};

    new foo2( ......... ) ;

    et cela :
    new foo2{3.2, i2.i};

  5. #5
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Non non, la nouvelle norme permet cela (voir le lien de mon premier post).
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Par défaut
    Salut,

    Bizarre ...

Discussions similaires

  1. Trop de "using(var foo = new Foo())" ?
    Par Iradrille dans le forum C#
    Réponses: 11
    Dernier message: 01/06/2015, 12h21
  2. Réponses: 1
    Dernier message: 13/07/2013, 17h35
  3. [TinyMCE] Liste qui se substitue au div initial
    Par bogue dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 25/04/2013, 16h36
  4. [C++0x] Initializer lists et héritage
    Par Florian Goo dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2008, 20h23
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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