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

Langage C++ Discussion :

Opérateur pré ou post incrémentation


Sujet :

Langage C++

  1. #1
    Membre habitué
    Homme Profil pro
    Doctorant en Geomodélisation
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Geomodélisation

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut Opérateur pré ou post incrémentation
    Bonjour,

    Je me pose une question, qui va peut être s'avérer un peu bête, mais j'aimerais bien avoir l'avis de personne qui s'y connaissent bien.

    En résumer la question c'est : plutôt i++ ou ++i ? et pourquoi ...

    Par exemple, dans une boucle ''for'', j'ai plutôt tendance à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for( int i = 0 ; i < 1e6 ; ++i ){ ... }
    plutôt que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for( int i = 0 ; i < 1e6 ; i++ ){ ... }
    La justification que je me donne en général pour ce choix, c'est celle que j'ai trouvé dans mes cours (comme par exemple ici), mais qui s'applique plutôt pour des itération sur des objets plus gros où l'opérateur ++ est surchargée. D'après mes cours, la post-incrémentation fait une copie temporaire, ce qui est un peu plus couteux.

    Pourtant, je trouve régulièrement des post-incrémentations dans des codes assez sérieux et plutôt très optimisés, à des endroits où j'aurais plutôt mis un pré-incrémentation pour que ce soit plus rapide (eg. dans un for).

    Je suis conscient que sur des entiers, au final, la différence ne doit pas être phénoménale, mais j'aimerais comprendre quand même si c'est une erreur de dire qui ++i est plus rapide que i++.

    J'ai voulu essayer de chronométrer les deux options et le résultat n'est pas très clair, plutôt aléatoire en fait. Donc j'imagine que les écarts sont dus à des petites perturbation pendant l'exécution du programme plutôt qu'à l'utilisation d'un opérateur ou d'un autre.

    Si quelqu'un a des éclaircissements la dessus, ils sont bienvenus.

    Merci

  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
    Sur des entiers, il n'y a aucun problème à utiliser i++.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 604
    Par défaut
    En théorie i++ te cré une copie temporaire (contrairement à ++i). Donc même pour un entier, i++ est censé être plus lent que ++i. Dans la pratique, les compilo savent optimiser tout ça et le code généré avec i++ ou ++i est le même. Peut être même que ce comportement est spécifié quelque part dans la norme (si quelqu'un peut confirmer/infirmer...).

    Attention, je n'ai pas dit que i++ fait la même chose que ++i !

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634

  5. #5
    Membre habitué
    Homme Profil pro
    Doctorant en Geomodélisation
    Inscrit en
    Octobre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Geomodélisation

    Informations forums :
    Inscription : Octobre 2007
    Messages : 7
    Par défaut
    Merci pour la rapidité de vos réponses.

    Désolé, cette page de la FAQ a du m'échapper, sinon je n'aurais pas posé la question là. C'est pas faute d'avoir cherché, promis.

    Citation Envoyé par pyros Voir le message
    Dans la pratique, les compilo savent optimiser tout ça et le code généré avec i++ ou ++i est le même. Peut être même que ce comportement est spécifié quelque part dans la norme (si quelqu'un peut confirmer/infirmer...).
    Donc si je comprends bien, quand on écrit un i++ "isolé" le compilateur simplifierait en implémentant un ++i à la place et c'est pour ça qu'au final ça reviendrait au même ? Mais est ce que tout compilateur va faire ça, ou bien est ce qu'il y a des options optimisation à activer pour ça ?
    La question de savoir si c'est la norme qui spécifie ça m'intéresse ...

    Bon je marque quand même le sujet comme résolu, je suis conscient que ça devient du pinaillage

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par cijad Voir le message
    Donc si je comprends bien, quand on écrit un i++ "isolé" le compilateur simplifierait en implémentant un ++i à la place et c'est pour ça qu'au final ça reviendrait au même ? Mais est ce que tout compilateur va faire ça, ou bien est ce qu'il y a des options optimisation à activer pour ça ?
    La question de savoir si c'est la norme qui spécifie ça m'intéresse ...
    Pour un type primitif, si tu trouves un compilateur qui gère différemment ++i et i++, tu peux le dénoncer en place publique.

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

Discussions similaires

  1. post et pré incrémentation
    Par dealler dans le forum Autres éditeurs
    Réponses: 14
    Dernier message: 12/04/2017, 09h15
  2. Réponses: 3
    Dernier message: 13/12/2011, 10h44
  3. problème avec la post-incrémentation
    Par peperaleur dans le forum Débuter
    Réponses: 6
    Dernier message: 30/01/2008, 20h54
  4. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  5. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36

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