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 :

difftime : pourquoi en double ?


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut difftime : pourquoi en double ?
    Dans <ctime> est définie la fonction difftime.
    Elle prend en argument deux time_t, qui représentent des temps écoulés depuis le 1er janvier 1970. La fonction difftime renvoie la différence entre les deux.

    Mais pourquoi diable la renvoie-t-elle dans le type double , alors que les arguments sont en fait des types entiers ??

    Quelqu'un aurait-il une explication ?

    Puis-je sans danger transtyper en type_t ?

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Parce que le standard ne garantie pas que time_t est un type entier. C'est par respect du standard POSIX que time_t représente un temps entier en seconde, mais c'est pas une obligation. http://en.cppreference.com/w/cpp/chrono/c/time

    Sinon, si tu utilises le C++11, tu devrais peut être voir du côté des fonctions C++ au lieu du C : http://en.cppreference.com/w/cpp/chrono

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Parce que le standard ne garantie pas que time_t est un type entier. C'est par respect du standard POSIX que time_t représente un temps entier en seconde, mais c'est pas une obligation. http://en.cppreference.com/w/cpp/chrono/c/time
    Oui, j'avais lu cela.
    Mais comme cela me semblait complètement crétin de spécifier précisément le type de la différence, mais pas le type des "time points", j'ai posé la question...

    Citation Envoyé par gbdivers Voir le message
    Sinon, si tu utilises le C++11, tu devrais peut être voir du côté des fonctions C++ au lieu du C : http://en.cppreference.com/w/cpp/chrono
    J'utilise Visual 2010. J'ai proposé de mettre à jour notre Boost pour bénéficier de chrono, mais ça ne sera pas satisfait dans l'immédiat.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Sur ce coup là, je suis bien d'accord Je suppose que cela vient du fait que le type en retour n'entre pas dans la signature des fonctions (mais bon, c'est du C, ça n'aurait pas été choquant d'avoir deux fonctions, comme pour les fonctions abs par exemple : abs, fabs, labs, llabs)

    Sinon, comme c'est des types entiers, tu te créées une fonction perso qui retourne un entier (moins moche qu'un cast de double en entier) (avec un type trait is_integral si dispo pour la sécurité du code)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    (avec un type trait is_integral si dispo pour la sécurité du code)
    Je ne vois pas trop comment tu fournis au trait le type de retour de la fonction afin d'être en mesure de le tester.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Tu vas avoir une erreur je-sais-pas-quelle-fonction-appeler là. Quand enable_if sera vrai, tu auras 2 difftime avec la même signature
    En plus, tu fais un cast double -> int (et il y a peut être un cast ou 2 interne à la fonction). Un simple (endDate - startDate) est suffisant

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

Discussions similaires

  1. Pourquoi ce double originator?
    Par cmail dans le forum IGN API Géoportail
    Réponses: 18
    Dernier message: 19/12/2010, 09h22
  2. Pourquoi le Double clic est ignoré
    Par banban54 dans le forum Delphi
    Réponses: 2
    Dernier message: 17/05/2007, 17h57
  3. Pourquoi utiliser un Long ou un Double ?
    Par n!co dans le forum Langage
    Réponses: 7
    Dernier message: 21/02/2007, 17h52
  4. Réponses: 4
    Dernier message: 26/08/2006, 02h01
  5. Réponses: 1
    Dernier message: 07/02/2006, 12h52

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