Partage
  • Partager sur Facebook
  • Partager sur Twitter

C++ Scott Meyers, transmission parfaite

C++

    6 novembre 2018 à 10:46:42

    Merci joe_link_noir, gbdivers et romantik , bacelar et lmghs pour vos précisions :

    Voici une proposition de code qui semble résoudre la question 3 :

    Notez que j'ai fait

     f(std::forward<T>(n));

    et pas

     f(std::forward<T&&>(n));

    ??

    Pour le forward, j'ai regardé au conseil 24 sans trop m'apesantir dessus, car j'en suis au au conseil 3. Cependant, Scott Meyers indique  dans la section " à retenir":

    "std::forward convertit son argument en rvalue uniquement si celui-ci est lié à une rvalue".


    #include <iostream>
    #include <memory>
    
    void f(int &n) {
    
            std::cout<<"f a été appelé par une lvalue";
    }
    
    void f(int&& n) {
    
            std::cout<<"f a été appelé par une rvalue";
    
     }
    
     // declaration de g
    
    template <typename T>
     void g(T&& n)
     {
         f(std::forward<T>(n));
    
     }
    
    
    
    int main() {
        // appel de f avec une lvalue
        int b{1};
        //f(b);
        g(b);
    
        // appel de f avec une rvalue
        //f(1);
        g(1);
    
    
    }



    -
    Edité par pseudo-simple 6 novembre 2018 à 10:47:03

    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2018 à 13:11:40

      YES, man a écrit:

      Notez que j'ai fait

       f(std::forward<T>(n));

      et pas

       f(std::forward<T&&>(n));

      ??

      C'est la syntaxe. Cf la doc de std::forward : https://en.cppreference.com/w/cpp/utility/forward 

      YES, man a écrit:

      Cependant, Scott Meyers indique  dans la section " à retenir":

      "std::forward convertit son argument en rvalue uniquement si celui-ci est lié à une rvalue".

      Et qu'est-ce qui te gène avec cette phrase ?

      • Partager sur Facebook
      • Partager sur Twitter

      C++ Scott Meyers, transmission parfaite

      × 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