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 :

Apprendre le C++ : petits problèmes


Sujet :

C++

  1. #41
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Non, par exemple, std::vector<bool> est justement spécialisé pour les gérer en tant que bit unitaires.
    Super, j'ai plus qu'à retourner me coucher. Au moins, ce sera moins con que ce matin .
    Find me on github

  2. #42
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    vector<bool> est un ovni qu'il vaut mieux éviter... Vaut mieux préférer les alternatives de chez boost.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #43
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Mais il reste vrai que le booléen de C++ est un byte
    Il peut faire plus d'un byte.

    Citation Envoyé par white_tentacle Voir le message
    Est-ce le modèle du C++ ou celui des architectures sur lesquelles il tourne en général ?
    Celui du C et du C++. Le compilateur se debrouille avec.

    Il y a le probleme de ce qui est faisable efficacement. Mais il y a un effet de retro-action (les langages essaient de rendre accessibles ce que le hard propose -- mais bon, voir l'acces aux flags d'overflow... -- et les archi essaient de rendre efficace ce dont les langages populaires ont besoin -- et dans ce sens la je ne trouve pas de contre-exemple, par contre on trouve facilement des instructions qui sont implementees peu efficacement parce que non utilisees dans les langages populaires)

    Il ne faut pas non plus oublier qu'ouvrir la possibilite pour une implementation la force a l'utiliser (dans le cas present, la pression serait forte pour qu'elle le soit pour les tableaux, mais AMA faible dans les autres cas).

    Parce que si bool prend 1 unique bit, comment est défini bool* ?
    L'equivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct boolptr {
       word* base;
       unsigned bit_in_word;
    };
    Il y a deja des implementations de C qui font ca pour les char*.

    Il me semble qu'avoir un type qui tienne moins en mémoire que l'unité de l'espace d'adressage est très problématique dans un langage à pointeurs. Ou alors tu englobes ça dans le "modele du C++" ?
    Ca en fait partie mais ce n'est pas rédhibitoire, voir ci-dessus et ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct pair_bool
    {
        bool b1; // 1 bit
        bool b2; // 1 bit
    } // pair_bool fait 2 bits, donc sizeof(pair_bool) == 1 byte
    [/quote]

    Tu peux aussi te mettre des contraintes d'alignement qui font que la struct ait deux bytes au moins sans une indication qu'il faut accorder plus d'importance a l'espace (mot cle ou pragme packed ou meme une notation de bitfield qui n'empecherait pas de prendre l'adresse -- les deux ouvrant des choix supplementaires, concevoir un langage, ce n'est pas simple). Mais avoir sizeof() qui te retourne un nombre de bytes est un aspect vraisemblablement a changer.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #44
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    En C il n'existe pas.
    [Digression]
    En C89 non effectivement.

    Par contre la norme de 99 a introduit un type booléen _Bool ainsi que la macro bool qui correspond.

    [/Digression]

Discussions similaires

  1. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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