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 :

[Langage] Boucle for : char, short VS int


Sujet :

Langage C++

  1. #1
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut [Langage] Boucle for : char, short VS int
    Bonjour,

    J'ai une petite question : je me pose la question de savoir pourquoi est-ce que dans une boucle for on déclare "toujours" la variable "compteur" traditionnellement nommée i en type int ?

    Si lorsqu'on programme on sait pertinemment que cette variable ne dépassera pas 255 (ce qui arrive quand même assez souvent), pourquoi ne pas la déclarer en tant que char ?

    J'ai lu (vraiment survolé) sur ce forum que le type int était "celui le mieux géré par les processeurs" et donc qu'il était plus rapide de déclarer un int qu'un char : est-ce que c'est vrai, est-ce que j'ai mal compris ?

    Voilà, merci d'avance ^^

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Effectivement, les types primitifs plus petits que des int sont "promus" en int pour des raisons de facilité d'utilisation de la part du processeur.

    Mais je crois qu'il y a aussi le fait que, inconsciemment, on associe souvent le type char aux... caractères et le type int aux... entiers.

    Ce sont donc là deux raisons qui font que beaucoup de gens vont "naturellement" se tourner vers une variable de type int lorsqu'il s'agit de déclarer un compteur

    Mais, ceci dit, n'oublie pas que "qui peut le plus peut le moins", et qu'il sera toujours préférable d'utiliser un type "qui peut représenter plus de valeur" qu'un type qui risque de ne pas pouvoir représenter toutes les valeurs que l'on souhaite utiliser

    N'oublie en effet pas que les 255 valeurs possibles pour un (unsigned) char ne sont absolument pas assurées, car, pour autant qu'il est possible de représenter l'ensemble du jeu de caractères utilisé par l'architecture, le nombre de bits utilisés pour un char (et par conséquent la plage de valeurs qu'il peut représenter) ne dépend de l'architecture

    L'un dans l'autre, si l'on ne considère que les caractères non accentués, les chiffres et les (32) caractères qui ont valeur d'instructions, il ne faut que 94 valeurs différentes, ce qui permettrait donc à un char d'être représenté sous la forme de ... 7 bits, mais qu'il n'est pas impossible d'envisager une architecture sur laquelle le jeu de caractères nécessiterait n'importe quel nombre de bits, supérieur à 8
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    D'accord d'accord !

    Donc en définitive, il est préférale de continuer à utiliser des int pour les boucles for ?

    Le gain de performance entre un char et un int pour une boucle est négligeable ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    J'ai une petite question : je me pose la question de savoir pourquoi est-ce que dans une boucle for on déclare "toujours" la variable "compteur" traditionnellement nommée i en type int ?
    Traditionnellement c'est plutôt le type qui faut et non int...
    Les boucles avec entiers étant généralement faites pour parcourir une séquence à accès aléatoire (ce qui n'est d'ailleurs pas une bonne idée, un itérateur est plus efficace et plus universel), on utilise le type qui est documenté comme étant suffisamment grand pour contenir la taille maximale de la séquence, typiquement size_t.
    Bien sûr, il est mieux de ne pas écrire ce type de boucle du tout, et d'utiliser soit des itérateurs, soit plus pratique, une boucle foreach.
    Boost ftw

  5. #5
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    Je suis d'accord avec vous sur le principe, d'ailleurs dans mes codes, j'essaie toujours de faire comme vous le préconisez, par contre, est-ce qu'il est possible de tout le temps utiliser des itérateurs, ou un foreach ... je ne saurais le dire.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Ça dépend si tu es en train de faire des algorithmes intelligents et non triviaux, ou si tu veux juste parcourir une séquence qui satisfait tel critère...
    Boost ftw

  7. #7
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Dans le pire des cas, tu as toujours l'itérateur Boost.Counting Iterator. Puis tu peux définir tes propres itérateurs selon tes besoins. Mais après, dans un contexte industrielle, il faut parfois composer avec des boucles classiques. Un int permet à ta boucle d'être gérée au mieux et à mon sens n'apporte ni risque ni ambigüité.

  8. #8
    Membre du Club Avatar de nschoe
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 86
    Points : 44
    Points
    44
    Par défaut
    D'accord. Merci pour les infos !

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Modéliser les générateurs de séquence par des input iterators c'est pas mal, oui.
    Counting iterator n'est qu'un cas particulier
    Boost ftw

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/10/2013, 14h32
  2. Erreur d'index sur une List<int> dans boucle for
    Par popoliline dans le forum C#
    Réponses: 13
    Dernier message: 16/06/2010, 11h03
  3. Déclaration d'un int dans une boucle for
    Par coincoin73 dans le forum Visual C++
    Réponses: 4
    Dernier message: 05/06/2009, 13h14
  4. [Taglib] Equivalent boucle "for(int i ; i<10 ; i++ )
    Par Hikage dans le forum Taglibs
    Réponses: 2
    Dernier message: 22/03/2006, 15h53
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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