• [^] # Re: Intéressant

    Posté par . En réponse à la dépêche Je crée mon jeu vidéo E09 : Techniques de C++11 appliquées au système à entités. Évalué à 1.

    Il faut aussi ajouter que le std::move est lié au Rvalue-reference. Cela permet de "convertir" une Lvalue-reference (pour le compilateur) en Rvalue-reference

    Un autre exemple pourrait être (en se basant sur le tien), une fonction qui fait la moyenne

    double mean(const std::vector<double> &func) {
     /// blabla
     return 0;
    }

    Ça c'est bien mais essaye de faire ça

    mean(func());

    Tu auras le droit à un beau message d'erreur du compilateur (l'argument n'est pas un Lvalue-reference)
    Quelle était la solution?
    -Soit tu mettais le résultat de func dans une variable (une copie si il n'y a pas de RVO)
    -Soit tu ajoutais la fonction suivante

    double mean(std::vector<double> func) {
     /// blabla
     return 0;
    }

    Par contre la tu fais une copie.

    La solution avec les Rvalue-references est d'ajouter la fonction:

    double mean(const std::vector<double> &&func) {
    /// blabla
    return 0;
    }

    Tu peux maintenant utiliser:

    mean(func());