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 :

rvalue reference et lvalue


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par d�faut rvalue reference et lvalue
    Bonjour,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::ofstream("Log file", std::ios::app) << "Log message\n";
    Appel

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    //basic_ostream& operator<<(const void* p);

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    std::ofstream("Log file", std::ios::app) log_file;
    log_file << "Log message\n";
    Appel :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    //template<class traits>
    //basic_ostream<char,traits>&
    //operator<<(basic_ostream<char,traits>&, char);
    Pourquoi est-il n�c�ssaire d'avoir un ostream qui soit
    une lvalue et non une rvalue, j'ai du mal � voir clairement le probl�me

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 048
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par d�faut
    Bonjour ,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::ofstream("Log file", std::ios::app) << "Log message\n";
    �a voudrais dire appeler la m�thode operator()<< pour un objet anonyme, mais alors... quand ferais tu le close()?
    Certains en diront plus car je veux pas trop m'avancer sur le sujet des lvalues et rvalues, j'ai pas lu assez de chose sur le sujet. Mais voila ma vision

  3. #3
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par d�faut
    ok je viens de comprendre c'est juste que la version void* est d�fnit dans la classe et que la version char est non membre de la classe (acc�der via Koenig lookup) et qu'on ne peut pas binder une rvalue avec une ref�rence non const

    l'exemple viens de ce site
    http://www.open-std.org/jtc1/sc22/wg...004/n1690.html

    mais il doit y avoir une coquille car il ne s'agit pas d'un char mais d'un char* mais le probl�me reste identique

  4. #4
    Membre �prouv� Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Ao�t 2008
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2008
    Messages : 84
    Par d�faut
    Bonjour,

    Citation Envoy� par Astraya
    [...] quand ferais tu le close()?
    Il est appel� par le destructeur de l�objet anonyme qui est appel� automatiquement � la fin de l�expression.

    Citation Envoy� par guillaume07
    c'est juste que la version void* est d�fnit dans la classe et que la version char est non membre de la classe
    C�est exactement �a :
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    ofstream(/*...*/) << "..."; // marche pas, car cet opérateur est non membre
                                // et ofstream est pris de manière non const.
    ofstream(/*...*/) << 2; // marche, car cet opérateur est membre.

  5. #5
    Membre tr�s actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par d�faut
    Citation Envoy� par nowahn Voir le message

    C�est exactement �a :
    Code C++ :
    ofstream(/*...*/) << "..."; // marche pas, car cet op�rateur est non membre // et ofstream est pris de mani�re non const. ofstream(/*...*/) << 2; // marche, car cet op�rateur est membre.
    et de bien comprednre qu'une rvalue ( ici plus pr�cisement une variable temporaire) ne peut pas �tre binder avec une ref�rence non const, hors c'est pr�cisement ce qu'attends la fonction non membre qui sera appel� , une r�f�rence non const � un objet de type ofstream.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [c++0x] Lumi�re sur les rvalue references
    Par Arzar dans le forum Langage
    R�ponses: 39
    Dernier message: 08/10/2009, 14h56
  2. les rvalue reference
    Par yan dans le forum C++
    R�ponses: 15
    Dernier message: 15/05/2008, 16h45

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