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 :

Curiosité de la fonction sdt::cout


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 72
    Par défaut Curiosité de la fonction sdt::cout
    Bonjour

    Il semble que la fonction cout imprime les flux de gauche à droite mais les construit de droite à gauche

    Exemple : Les instructions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    uint32_t q = 47 ;
    cout<<"\n"<<10*q<<", "<<q++<<"\n";
    donnent : 480, 47

    • Est-ce exact et si oui, il y a-t-il une raison à cela?
    • Existe-t-il d'autres curiosités de ce genre?


    Lorsqu'on affiche les résultats d'un test, on commence par incriminer le programme et on peut perdre pas mal de temps …

    Merci pour toute réponse

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    La norme du C++ ne garantit pas l'ordre d'évaluation des arguments passés à une fonction :

    The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonjour,

    std::cout n'est pas une fonction mais un objet, la fonction dans l'instruction que tu nous donnes c'est operator<<. Si l'on repasse en notation prefix (j'enlève les \n et , pour plus de légèreté) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    operator<<(
        operator<<(std::cout,10*q),
        q++
    );
    Tu vois donc qu'il y a deux expressions à évaluer pour l'appel à operator<< le plus "extérieur", or le C++ n'a pas de préférence pour l'ordre d'évaluation, c'est le compilateur qui décide. Selon ton compilateur et ta plateforme, ++ peut être exécuté avant ou après *.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 72
    Par défaut
    D'accord, j'ai ma réponse

    Merci à vous deux

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

Discussions similaires

  1. Recalage d'image et fonction de cout
    Par studentTun dans le forum Images
    Réponses: 0
    Dernier message: 23/10/2013, 08h35
  2. [Débutant] tracage de la fonction de cout
    Par midoubah dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/12/2011, 18h38
  3. Fonction : Même prototype que std::cout
    Par Snooker9 dans le forum C++
    Réponses: 28
    Dernier message: 15/12/2010, 16h09
  4. incrémenter le cout en fonction du temps en vb6
    Par 241987 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/02/2009, 12h54
  5. Réponses: 25
    Dernier message: 02/08/2008, 17h11

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