• [^] # Re: À suivre?

    Posté par (Mastodon) . En réponse au journal C++ Core Guidelines. Évalué à 2.

    D'autres me semblent plus tendu à mettre en place (typiquement les move).

    Au contraire, les move sont utilisés. Par exemple, si on utilise des retour de fonction par valeur plutôt que par argument, on va utiliser les move. Et il y a plein de cas où ça sert, comme les constructeurs. Petit exemple :

    struct Foo1 {
     Foo1(const std::string& bar) : m_bar(bar) { }
     std::string m_bar;
    }
    struct Foo2 {
     Foo2(std::string bar) : m_bar(std::move(bar)) { }
     std::string m_bar;
    }
    Foo1 f1("toto");
    Foo2 f2("toto");
    std::string qux("qux");
    Foo1 f3(qux);
    Foo2 f4(qux);

    Dans le cas de f1, tu crée un objet std::string et tu fais une copie dans m_bar (donc allocation et copie du contenu). Dans le cas de f2, tu crées un objet std::string et tu le déplaces donc pas d'allocation et pas de copie de contenu, juste un pointeur. Donc, dans ce cas là, tu es gagnant à utiliser un std::move. Et dans le cas où tu utilises une chaîne, ça ne change presque rien : dans f3 tu fais la copie dans le constructeur, dans f4 tu fais la copie au moment de l'appel.