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 :

Tableau de bool�ens


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 1
    Par d�faut Tableau de bool�ens
    Bonjour � tous ,
    je suis �tudiant en informatique et j'ai re�u un code dans le cours que je n'arrives pas � comprendre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
    using namespace std;
     
    int main() {
             unsigned r { 4 };
             bool * s { new bool [r] { true, true } };
             for (unsigned u = 0; u < r; ++u) {
                       cout << s[u] << " ";
         }
    }
    Le r�sultat affich� est : 1 1 "chiffre al�atoire" 0
    Je comprend les deux 1 car c'est true qui est initialis� mais je ne comprend pas pourquoi le troisi�me chiffre est automatiquement un nombre al�atoire et pourquoi le quatri�me prend une valeur logique qui est 0 car un bool�en non initialis� se met � false ( donc 0 ). Donc si quelqu'un peut m'expliquer ce code �a serait sympa

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    Bonjour,

    Pour moi, le code me semble bizarre, car il y a des accolade � la place de certaines parenth�ses.
    Sinon, la cellule 3 et 4 ne sont pas initialis� d'apr�s moi. Que cela tombe sur z�ro est de la chance. Et il y a une fuite de m�moire.
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  3. #3
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Citation Envoy� par Catsooo Voir le message
    je ne comprend pas pourquoi le troisi�me chiffre est automatiquement un nombre al�atoire et pourquoi le quatri�me prend une valeur logique qui est 0 car un bool�en non initialis� se met � false ( donc 0 ). Donc si quelqu'un peut m'expliquer ce code �a serait sympa
    Un bool�en non-initialis� ne se met � rien du tout, il a une valeur al�atoire. Donc la valeur que tu r�cup�res d�pendra de :
    - d�tails d�impl�mentation
    - l��tat de ta m�moire

    Pas grand chose d�int�ressant � en tirer, sauf si tu t�int�resse au fonctionnement interne de ton compilateur. Pour info, chez moi les deux valeurs (3 et 4) sont � z�ro.

    Sinon, quelques remarques sur le code en question :
    - la syntaxe, bien que valide, est peu usuelle. On pr�f�re plut�t �crire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    unsigned int r = 4;
    bool* s = new bool[r]{ true, true};
    - utiliser des initializer-lists avec un tableau de taille variable g�n�re un warning chez moi. C�est logique, le compilateur ne peut pas v�rifier que le tableau cible a bien une taille suffisante, ce qui est susceptible de poser de gros probl�mes.
    - comme l�a fait remarquer littlewhite, il y a une fuite m�moire.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par LittleWhite Voir le message
    Pour moi, le code me semble bizarre, car il y a des accolade � la place de certaines parenth�ses.
    la syntaxe, bien que valide, est peu usuelle
    Si je ne me trompe pas, ceci est une nouveaut�s du C++11, on peut remplacer les parenth�ses des constructeurs par des accolades.
    Ce n'est donc pas valide en C++99 par exemple.

    Attention � la petite nuance :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    struct myclass {
      myclass (int,int);
      myclass (initializer_list<int>);
      /* definitions ... */
    };
     
    myclass foo {10,20};  // calls initializer_list ctor
    myclass bar (10,20);  // calls first constructor

    cf http://www.cplusplus.com/reference/i...tializer_list/

  5. #5
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    Par d�faut
    Citation Envoy� par Neckara Voir le message
    Si je ne me trompe pas, ceci est une nouveaut�s du C++11, on peut remplacer les parenth�ses des constructeurs par des accolades..
    C++11 am�ne bien l'initialisation uniforme.

    Citation Envoy� par Neckara Voir le message
    C++99
    C++98, C++03, C++11, C++14, C++17, ...

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Inscrit en
    D�cembre 2011
    Messages
    9 026
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Loire (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Doctorant s�curit� informatique � Dipl�m� master Droit/�conomie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : D�cembre 2011
    Messages : 9 026
    Par d�faut
    Citation Envoy� par Ehonn Voir le message
    C++98, C++03, C++11, C++14, C++17, ...
    Ah... je confonds avec le C :
    C89/90, C99, C11.

    Je dis pas mal de b�tises ces derniers temps .

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Donc si j'ai bien compris, en C++11, on a droit � une instanciation du type:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    bool* pTab = new bool[4] { true, true };
    Mais contrairement � bool tab[4] = {true, true};, cela n'initialise pas les valeurs restantes?
    (probablement sur le m�me principe qu'un tableau dynamique de POD n'est jamais initialis� automatiquement)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre Expert
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par d�faut
    Je ne suis pas d'accord. Si le tableau est initialis�, les valeurs non initialis�s le seront avec {} ; false pour un bool�en, 0 pour un int, etc.

    new bool[4]; : pas initialis�
    new bool[4] {}; : 0 0 0 0
    new bool[4] { true, true }; : 1 1 0 0

    Que le 4 soit dynamique ou pas.

  9. #9
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Citation Envoy� par jo_link_noir Voir le message
    Je ne suis pas d'accord. Si le tableau est initialis�, les valeurs non initialis�s le seront avec {} ; false pour un bool�en, 0 pour un int, etc.

    new bool[4]; : pas initialis�
    new bool[4] {}; : 0 0 0 0
    new bool[4] { true, true }; : 1 1 0 0

    Que le 4 soit dynamique ou pas.
    Je confirme. C�est bien ce que dit ma version de la norme (� 8.5.1 et suivants). J�ai tendance � oublier que le compilateur initialise certaines valeurs dans certains contextes (c�est tellement moins grave de se tromper dans ce sens l� que je pr�f�re toujours initialiser explicitement).

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Alors comment expliquer les r�sultats obtenus par catsooo?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par d�faut
    Cela d�pend du compilateur, des optimisations (ou mode d�bogage) et du syst�me, je pense.
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    D�cembre 2010
    Messages
    734
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 734
    Par d�faut
    Peut-�tre que le compilateur n'est pas full C++11 et ne fait pas la partie implicite de l'initialisation? C'est lequel?

  13. #13
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 050
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par d�faut
    Je comprend les deux 1 car c'est true qui est initialis� mais je ne comprend pas pourquoi le troisi�me chiffre est automatiquement un nombre al�atoire et pourquoi le quatri�me prend une valeur logique qui est 0 car un bool�en non initialis� se met � false ( donc 0 ). Donc si quelqu'un peut m'expliquer ce code �a serait sympa
    Normalement les deux derniers doivent �tre al�atoire. que tu obtiennes 0 est un pur hazard.

    Cela d�pend du compilateur, des optimisations (ou mode d�bogage) et du syst�me, je pense.
    L'initialisation est une fantaisie de compilateur si c'est le cas, certains set � 0 (peut-�tre) d'autre le set rien (prend la valeur qui est d�j� dans la m�moire).
    Mais le compilateur qui set � 0 sans que l'on lui demande... �a doit �tre une option (optimisation?)

    Je me rappelle de m�moire avoir eu un truc similaire en debug et release. En Debug, les valeurs �tait par defaut � 0, en release non (Sous visual express 2008 de m�moire)

    Il n'est pas normal qu'un compilateur initialise pour nous une valeur sans que l'on lui demande explicitement.

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    D�cembre 2010
    Messages
    734
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 734
    Par d�faut
    Citation Envoy� par Astraya Voir le message
    Normalement les deux derniers doivent �tre al�atoire. que tu obtiennes 0 est un pur hazard
    cf + haut, c++11 est cens� initialiser � la valeur par d�faut quand on n'initialise explicitement que certains �l�ments.

  15. #15
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de caf�
    Inscrit en
    Mai 2007
    Messages
    1 050
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France

    Informations professionnelles :
    Activit� : Consommateur de caf�
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 050
    Par d�faut
    cf + haut, c++11 est cens� initialiser � la valeur par d�faut quand on n'initialise explicitement que certains �l�ments.
    Oups... J'ai lu en diagonal, je n'ai pas encore eu l'occasion d'utiliser les list initializer.
    Mais dans ce cas l�, il ne devrait pas avoir de valeur al�atoire dans s[2]....
    Est-ce que le r�sultat est le m�me sans l'allocation dynamique?

Discussions similaires

  1. R�ponses: 3
    Dernier message: 22/12/2008, 10h05
  2. Transformer tableau de bool�ens en une variable h�xad�cimale
    Par H3bus dans le forum Collection et Stream
    R�ponses: 5
    Dernier message: 09/12/2008, 15h52
  3. [WD10] Indice 1 d'un tableau de bool�en
    Par agbononamour dans le forum WinDev
    R�ponses: 2
    Dernier message: 13/11/2008, 10h06
  4. Comment passer un tableau de bool�ens dans IB ?
    Par colorid dans le forum Bases de donn�es
    R�ponses: 0
    Dernier message: 22/11/2007, 18h26
  5. Cr�er un tableau de bool�ens
    Par babylone_59 dans le forum Ada
    R�ponses: 5
    Dernier message: 26/10/2006, 11h04

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