Partage
  • Partager sur Facebook
  • Partager sur Twitter

conseil 7 et long double

C++, Programmer efficacement en C++11/14

Sujet résolu
    10 décembre 2018 à 7:58:06

    Salut Guillaume, suite à de longues et difficiles recherches je suis arrivé à la conclusion suivante : 

    Ta question sur le constructeur de std::string(123) était une question piège car aucun des constructeurs de std::string ne colle ! Une question me vient donc à l'esprit, où voulais tu en venir ??

    • Partager sur Facebook
    • Partager sur Twitter

    C++ à la vie à la mort. (Le python c'est bien aussi) || Rejoignez : https://discord.gg/9r3zqgg

      10 décembre 2018 à 8:51:29

      RomainBricout a écrit:

      Ta question sur le constructeur de std::string(123) était une question piège car aucun des constructeurs de std::string ne colle !

      Pourtant le compilateur l'accepte :) .

      • Partager sur Facebook
      • Partager sur Twitter

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

        10 décembre 2018 à 9:13:00

        (Non, std::string(123) ne compile pas) 

        RomainBricout a écrit:

        Ta question sur le constructeur de std::string(123) était une question piège car aucun des constructeurs de std::string ne colle ! Une question me vient donc à l'esprit, où voulais tu en venir ??

        Non, je suis un gentil, je ne fais pas de question piège... Ma question était sur std::string("123"), pas sur std::string(123).

        C'est jo_link_noir qui demandait ce que faisait std::string(123). (Et la réponse est que ça ne compile pas).

        Et la réponse était que "123" est de type const char[] donc le constructeur appelé pour la conversion est le 5eme:

        basic_string( const CharT* s,
                      const Allocator& alloc = Allocator() );

        -
        Edité par gbdivers 10 décembre 2018 à 9:15:49

        • Partager sur Facebook
        • Partager sur Twitter
          10 décembre 2018 à 9:21:21

          Ah putain les parenthèses, autant pour moi.

          • Partager sur Facebook
          • Partager sur Twitter

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

            10 décembre 2018 à 9:36:52

            Oui :) D'ailleurs, bonne question ! Si on écrit std::string{65}, qu'est-ce que ca affiche et quel constructeur est appelé. (J'ai remplacé 123 par 65 pas sans raison...)
            • Partager sur Facebook
            • Partager sur Twitter
              10 décembre 2018 à 10:00:04

              J'avais testé std::string(123)   (ou 65 d'ailleurs), et cela donnait une erreur à la compilation. J'ai regardé dans la doc pour savoir quel constructeur est appelé et apparemment aucun ne correspondait.

              http://www.cplusplus.com/reference/string/string/string/

              et à priori, je ne trouve pas de conversion implicite 123 vers const char* par exemple ou autre...

              -
              Edité par pseudo-simple 10 décembre 2018 à 10:05:07

              • Partager sur Facebook
              • Partager sur Twitter
                10 décembre 2018 à 11:09:41

                ASCII

                -
                Edité par LilyKianii 10 décembre 2018 à 11:11:26

                • Partager sur Facebook
                • Partager sur Twitter
                  10 décembre 2018 à 11:16:46

                  Attention aux syntaxes ! 

                  std::string(65), std::string{65}, std::string("65") et std::string{"65"} sont 3 choses différentes. (Oui, j'ai dit "3" et pas "4")

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 décembre 2018 à 12:05:37

                    Intéressant gbdivers; Merci d'avoir proposé ces 4 tests.

                    J'ai testé effectivement et en fouillant dans C++11, grâce au livre de Scott Meyers, je me suis rendu compte qu'il y a un constructeur de string avec initializer_list qui permet de créer un string en initialisant un initializer_list<char>. Du coup notre 65 subit une conversion implicite en char, ce qui correspond d'après le code ASCII à A.

                    Est-ce que quelqu'un peut préciser si il y a une imprécision dans ce que j'ai écrit ?

                    -
                    Edité par pseudo-simple 10 décembre 2018 à 12:20:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 décembre 2018 à 15:42:45

                      YES, man a écrit:

                      Intéressant gbdivers; Merci d'avoir proposé ces 4 tests.

                      J'ai testé effectivement et en fouillant dans C++11, grâce au livre de Scott Meyers, je me suis rendu compte qu'il y a un constructeur de string avec initializer_list qui permet de créer un string en initialisant un initializer_list<char>. Du coup notre 65 subit une conversion implicite en char, ce qui correspond d'après le code ASCII à A.

                      Est-ce que quelqu'un peut préciser si il y a une imprécision dans ce que j'ai écrit ?

                      -
                      Edité par YES, man il y a environ 3 heures

                      C'est surement l'analyse la plus juste que tu ai faite.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 décembre 2018 à 16:33:32

                        Thanks , merci :)

                        Il y en a eu d'autres aussi :) de ce genre :)

                        -
                        Edité par pseudo-simple 10 décembre 2018 à 16:33:56

                        • Partager sur Facebook
                        • Partager sur Twitter

                        conseil 7 et long double

                        × 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