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

 C++ Discussion :

sémantique de mouvement et équivalence..


Sujet :

C++

  1. #1
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut sémantique de mouvement et équivalence..
    Bonjour !

    je dispose d'un objet 'Object' étant 'movable' mais non 'copiable', je crois comprendre que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void fn(Object& obj)
    {
        auto tmp = std::move(obj);
    }
     
    Object o;
    fn(o);
    est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void fn(Object&& obj)
    {
        auto tmp = std::move(obj);
    }
     
    Object o;
    fn(std::move(o));
    ce code n'a que peux d’intérêt bien sur... mais je crois ne pas avoir encore bien saisi quelque chose...
    Ubuntu fan depuis la 8.04
    monnaie libre

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Même si techniquement équivalent (osef quand tu fais le move, tant qu'il y en a un ce sera équivalent), ton 1er code est un nid à erreur et un mensonge pour l'utilisateur de la fonction.
    Ta fonction prend une référence, si maintenant elle se retrouve à utiliser l'objet passé pour le déplacer ailleurs, l'appelant se retrouve comme un con avec un objet inutilisable après l'appel.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    si maintenant elle se retrouve à utiliser l'objet passé pour le déplacer ailleurs, l'appelant se retrouve comme un con avec un objet inutilisable après l'appel.
    super merci, ce '&&' un moyen de signifier à l'utilisateur de la fonction que l'objet risque de se faire 'aspirer' ^^
    Ubuntu fan depuis la 8.04
    monnaie libre

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est pas qu'un risque, si la fonction prend un &&, elle prend possession de l'objet puisqu'il faut l'y déplacer pour l'appel.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2017, 12h00
  2. Sémantique de mouvement & style de codage
    Par oodini dans le forum Langage
    Réponses: 14
    Dernier message: 25/09/2015, 11h09
  3. Réponses: 112
    Dernier message: 22/10/2013, 20h20
  4. Réponses: 1
    Dernier message: 14/05/2012, 18h54

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