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. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Apprendre le C++ : petits problèmes
    Bonjour!!

    Je suis en train d'apprendre le C++ grace au fabuleux livre "Apprendre le C++" de Claude Delannoy. Le livre est vraiment complet et très clair, mais il y a quelques soucis qui me pose problème malgré tout.
    Je vais essayer de les énumerer dans ce fil.

    Bon, d'abord, je signale que je travaille sous Linux (même si windows est aussi installé sur mon ordi ce qui me permet de tester mes programmes sous windows ca marche pas sous Linux!!!)
    J'utilise aussi la version 4.4.1 du comiliateur g++.

    Mon premier problème concerne l'appel du constructeur par recopie quand une fonction renvoie un objet. Voici un exemple qui illustre mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <iostream>
    using namespace std;
     
    class point
    	{
    		private : 
    			int x, y;
    		public :
    			point(int abs=0, int ord=0)		// Constructeur "usuel"
    				{
    					x=abs; y=ord; 
    					cout << "++ Appel Const. usuel   " << this << " " << x << " " << y << "\n";
    				}
    			point(const point & p)			// Constructeur de recopie
    				{
    					x=p.x; y=p.y;
    					cout << "++ Appel Const. recopie " << this << " " << x << " " << y << "\n";
    				}
    			~point()						// Destructeur
    				{
    					cout << "-- Appel Destr.         " << this << " " << x << " " << y << "\n";
    				}
    			point symetrique();
    	};
     
    point point::symetrique()
    {
    	point res; 
    	res.x = -x; res.y = -y; 
    	return res;
    }
     
    main()
    {
    	point a(1, 3), b;
    	cout << "** avant appel de symetrique\n";
    	b = a.symetrique();
    	cout << "** apres appel de symetrique\n";
    }
    Je n'ai pas de problème de compilation, mais le constructeur de recopie n'est pas appelé. Dans mon exemple, ca n'a aucune importance, mais ca en aurait si l'un des membres de la classe était un tableau.

    Voici ce que me donne l'execution de mon précédente programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch13$ ./copyctr3
    ++ Appel Const. usuel   0xbfe6a898 1 3
    ++ Appel Const. usuel   0xbfe6a890 0 0
    ** avant appel de symetrique
    ++ Appel Const. usuel   0xbfe6a888 0 0
    -- Appel Destr.         0xbfe6a888 -1 -3
    ** apres appel de symetrique
    -- Appel Destr.         0xbfe6a890 -1 -3
    -- Appel Destr.         0xbfe6a898 1 3
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch13$

    J'ai aussi un souci dans la spécialisation de fonction membre d'un patron de classe. Voici un bout de code donné en exemple dans le bouquin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <iostream>
    using namespace std;
     
    // Patron de classe : 
    template <class T> class point
    	{
    		private : 
    			T x; 
    			T y;
    		public :
    			point(T abs=0, T ord=0)
    				{ x = abs; y = ord; }
    			void affiche();
    	};
     
    // Définition de la fonction affiche : 
    template <class T> void point<T>::affiche()
    {
    	cout << "Coordonnées : " << x << " " << y << "\n";
    }
     
    // Fonction specialisée pour l'affichage des caractères : 
    void point<char>::affiche()
    {
    	cout << "Coordonnées : " << (int)x << " " << (int)y << "\n";
    }
     
    main ()
    {
    	point<int> ai(3, 5);			ai.affiche ();
    	point<char> ac('d', 'y');		ac.affiche ();
    	point<double> ad(3.5, 2.3);		ad.affiche ();
    }
    Quand j'essai de compiler le fichier, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch18$ g++ special.cpp -o special
    special.cpp:23: error: too few template-parameter-lists
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch18$
    Le plus drole, c'est qu'en essayant le même code sous windows, ca pose pas de problème. Ca vient du compilateur?


    J'ai un autre souci concernant l'initialisation d'objet, mais j'ai pas d'exemple sur moi : je vais voir si je peut trouver ca rapidement.

    D'ici là, merci d'avance pour les réponses au problème que j'ai posté...

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Alphonse Capriani Voir le message
    Je suis en train d'apprendre le C++ grace au fabuleux livre "Apprendre le C++" de Claude Delannoy. Le livre est vraiment complet et très clair
    Mais aussi bourré d'erreurs
    Citation Envoyé par Alphonse Capriani Voir le message
    Je n'ai pas de problème de compilation, mais le constructeur de recopie n'est pas appelé.
    Le compilateur a explicitement le droit de ne pas appeler le constructeur de recopie dans ce cas, même si le comportement est alors différent. C'est une sorte d'optimisation.
    Citation Envoyé par Alphonse Capriani Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <iostream>
    using namespace std;
     
    // Patron de classe : 
    template <class T> class point
    	{
    		private : 
    			T x; 
    			T y;
    		public :
    			point(T abs=0, T ord=0)
    				{ x = abs; y = ord; }
    			void affiche();
    	};
     
    // Fonction specialisée pour l'affichage des caractères : 
    void point<char>::affiche()
    {
    	cout << "Coordonnées : " << (int)x << " " << (int)y << "\n";
    }
    Quand j'essai de compiler le fichier, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch18$ g++ special.cpp -o special
    special.cpp:23: error: too few template-parameter-lists
    alphonse@alphonse-ordi:~/Documents/C++/ApprendreC++/ch18$
    Ce code n'est pas correct, même si visual C++ l'accepte à tort...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<>
    void point<char>::affiche()
    {
    	cout << "Coordonnées : " << (int)x << " " << (int)y << "\n";
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour la rapidité de cette réponse.

    Je reviens quand même sur tes remarques (j'espère que ca te dérange pas si je te tutoies!!! )

    Mais aussi bourré d'erreurs
    Probablement (j'en ai déjà répertorié plusieurs depuis le début, mais globalement elles sont suffisament énormes pour que je trouve la parade - des fautes de frappe pour la plupart).
    Néanmoins, sur un bouquin de 750 pages, fallait s'y attendre. Je maintiens que c'est un bon bouquin pour débuter...

    Le compilateur a explicitement le droit de ne pas appeler le constructeur de recopie dans ce cas, même si le comportement est alors différent. C'est une sorte d'optimisation.
    Je me doutais que c'étais un truc du genre qu'il se passait, mais je doit admettre que c'est assez gênant. Il n'y a pas moyen de forcer le compilateur à utiliser le constructeur par recopie? Comme je le disais, ca pose pas de souci dans l'exemple que j'ai posté, mais j'ai essayer avec un renvoie de classe dont un membre est un tableau, et j'ai le même problème. Et là c'est vraiment embettant puisqu'on a pas réellement recopie de l'objet au niveau du tableau...

    Cela dit, merci encore pour cette réponse rapide...

  4. #4
    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 Alphonse Capriani Voir le message
    Comme je le disais, ca pose pas de souci dans l'exemple que j'ai posté, mais j'ai essayer avec un renvoie de classe dont un membre est un tableau, et j'ai le même problème. Et là c'est vraiment embettant puisqu'on a pas réellement recopie de l'objet au niveau du tableau...
    Donne un code complet. Et n'oublie pas qu'une assignation n'appelle jamais le constructeur de copie mais l'operateur d'assignation (c'est d'ailleurs extremement rare de devoir ecrire l'un en pouvant se fier sur la version de l'autre generee automatiquement).

    Dans ton exemple, il y a construction de la variable res de symmetrique (par defaut), construction de la valeur retournee (par copie), assignation de celle-ci a b (operateur=). La seconde peut etre omise en faisant en sorte que la variable res occupe la place de la valeur retournee.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ok : je vais fournir un exemple...

    Il va juste falloir patienter un peu

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Alphonse Capriani Voir le message
    a- Je reviens quand même sur tes remarques (j'espère que ca te dérange pas si je te tutoies!!! )

    b- Probablement (j'en ai déjà répertorié plusieurs depuis le début, mais globalement elles sont suffisament énormes pour que je trouve la parade - des fautes de frappe pour la plupart).
    Néanmoins, sur un bouquin de 750 pages, fallait s'y attendre.

    c- Je maintiens que c'est un bon bouquin pour débuter...
    a- C'est le contraire qui me perturbe sur les forums

    c- AC++ est un bon bouquin pour débutants, et en plus tu es bilingue! (à en lire ta localisation) Profites-en.

    b- tu vois les erreurs grossières, comme la signature incorrecte du main dans les exemples du §7 (arf, et en plus, l'auteur sait que c'est incorrect...)

    Nous voyons des choix de pédagogie criticables :
    - choix du C++ historique
    - plus axé sur la syntaxe plutôt que sur les pratiques (comparer l'approche des divers héritages entre le livre et la FAQ -- c'était vrai dans l'ancienne version du livre du moins, le chapitre patché correspondant n'est pas librement accessible sur le site de l'éditeur)
    - §11: point::initialise() -- les débutants qui voient cette mauvaise pratique tendent à ne pas corriger le tir ensuite pour passer aux constructions initialisantes [et après on se retrouve avec des règles qualité qui prônent l'utilisation de ses fonction init(), ce qui est une faute de style)

    Nous voyons aussi les fautes de style:
    - comme les déclarations non initialisantes (même exemple)



    Je vois aussi quelques choix de vocabulaire fort étrange (moins grave, mais déroutant) :
    - c'est la première fois que je lis "argument muets" (le terme répandu est "paramètre formel")
    - "surdéfinition", ça je ne peux toujours pas ...

    Et d'autres bizarreries:
    - §7, il tourne autour du pot concernant les différences entre struct et class. Arf, §7.7.1 plus loin "toutefois, seul le type class permet l’encapsulation des données", OK je comprends mieux ... il ne connait pas la différence entre les deux.
    - §7: "La tendance la plus naturelle consiste à placer la déclaration d’une fonction à l’intérieur des déclarations de toute fonction l’utilisant" ...

    Bref. Je note des tous petits progrès au vu des pdf en ligne comparé avec le bouquin papier. Mais je ne serai pas surpris que certaines erreurs invisibles aux néophytes (comme celles sur les castings) persistent dans la dernière édition, ou encore que des notions importantes comme les listes d'initialisation soient toujours passées sous silence contrairement aux fonctions variadiques (qui n'ont même pas l'air d'aborder leur incompatibilité avec les types non-POD...), pareil pour affectation et héritage, ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    §11: point::initialise() -- les débutants qui voient cette mauvaise pratique tendent à ne pas corriger le tir ensuite pour passer aux constructions initialisantes [et après on se retrouve avec des règles qualité qui prônent l'utilisation de ses fonction init(), ce qui est une faute de style)
    Dans l'édition que je possède (la sixième), la classe « point » n'apparaît pas dans le onzième chapitre mais dans le douzième, et l'initialisation est faite dans le constructeur (pas de méthode « initialise »).

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Donc, si je comprends bien, les extraits de chapitres qui sont en ligne ne correspondraient pas à la dernière version ?
    Il parle des listes d'initialisation pour construire les membres ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    C'est mentionné dans le chapitre 7 (« Construction, destruction et initialisation des objets »), sous-partie 6 (« Initialisation de membres dans l'en-tête d'un constructeur »).
    Cette possibilité peut devenir indispensable en cas :
    • d'initialisation d'un membre donnée constant. [...]
    • d'initialisation d'un membre donnée qui est une référence. En effet, on ne peut qu'initialiser une telle référence, jamais lui affecter une nouvelle valeur (revoyez éventuellement le paragraphe 3.5 du chapitre 4).
    En revanche, j'ai une autre critique à faire : chapitre 6 (« Les propriétés des fonctions membres »), sous-partie 4 (« Cas des objets transmis en argument d'une fonction membre ») : au lieu d'un booléen natif, c'est un entier valant 0 ou 1 qui est utilisé.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    ya moyen de le contacter? on pourrait lui remonter ce genre d'erreur

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Parfois les sites des éditeurs ont des formulaires pour soumettre des errata.
    Parfois c'est pris en compte.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Là je suis en admiration .
    Je ne connais pas le bouquin dont vous parlez, et je me contente de lire vos observations, c'est déjà assez compliqué. Je ne change pas vraiment de sujet, peut-être même je me rapproche du sujet d'origine.
    Donc, il y a des citations du livre, qui semblent poser problème, il serait bon que soit indiqué ce qui aurait du être dit.
    Petit exemple, le type BOOL est il un type du C++ OUI ou NON ?
    Bonne journée

  13. #13
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Points : 1 104
    Points
    1 104
    Par défaut
    Il n'est pas spécifique à C++, mais c'est bien ça.

  14. #14
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    a- Donc, il y a des citations du livre, qui semblent poser problème, il serait bon que soit indiqué ce qui aurait du être dit.
    b- Petit exemple, le type BOOL est il un type du C++ OUI ou NON ?
    a- C'est aussi pour cela que l'on conseille d'autres livres en fait.

    b- Majuscules ? Probablement un typedef propriétaire quelconque. Le type booléen standard est "bool", en minuscules.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  15. #15
    Invité
    Invité(e)
    Par défaut
    @ Spidermario,
    Je suppose que
    c'est bien ça
    veut dire OUI.
    Question complémentaire, depuis quelle version de C++ le type booléen est-il défini ? Ma version (2002) ne mentionne nulle part le type booléen.
    Il s'agit d'un mot-clé, comme new, spécifique au C++ et non d'un type.
    Ce n'est pas du tout le même chose.
    Donc, je répond le type booléen n'existe ni en C ni en C++.

  16. #16
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    @ Spidermario,
    Je suppose que
    veut dire OUI.
    Question complémentaire, depuis quelle version de C++ le type booléen est-il défini ? Ma version (2002) ne mentionne nulle part le type booléen.
    Il s'agit d'un mot-clé, comme new, spécifique au C++ et non d'un type.
    Ce n'est pas du tout le même chose.
    Donc, je répond le type booléen n'existe ni en C ni en C++.
    bool existe depuis 1998 de sûr, sans doute avant.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  17. #17
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Depuis quelle version de C++ le type booléen est-il défini ? Ma version (2002) ne mentionne nulle part le type booléen.
    Il s'agit d'un mot-clé, comme new, spécifique au C++ et non d'un type.
    Ce n'est pas du tout le même chose.
    Donc, je répond le type booléen n'existe ni en C ni en C++.

    Je ne comprends pas trop ce que tu veux dire, le type bool est bien évidement défini dans le standard, il fait parti des "Fundamental Types" (3.9.1)

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    la bibliothèque standard C++ utilise "bool" d'ailleurs.

    En C il n'existe pas.

  19. #19
    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 Pierre Dolez Voir le message
    Question complémentaire, depuis quelle version de C++ le type booléen est-il défini ?
    bool est absent de l'ARM (90) et present dans D&E (1994).

    l s'agit d'un mot-clé, comme new, spécifique au C++ et non d'un type.
    Ce n'est pas du tout le même chose.
    Et on peut savoir ce que ce mot cle designe, si ce n'est un type?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  20. #20
    Invité
    Invité(e)
    Par défaut
    La nuance entre un mot clé et un type est au niveau le plus bas.
    En C comme en C++ la liste est types est parfaitement définie et fixée.
    Ci dessous un petit exemple pour expliquer cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int main(int argc, char* argv[])
    {
    struct STRBOOL
    {
      bool b[10];
    }StrBool;
    struct STRCHAR
    {
      char c[10];
    }StrChar;
    struct STRINT
    {
      int i[10];
    }StrInt;
    cout<<sizeof(StrBool)<<endl;  // résultat 10
    cout<<sizeof(StrChar)<<endl; // résultat 10
    cout<<sizeof(StrInt)<<endl;   // résultat 40 sur ma machine
    }
    Si le type booléen existait réellement, chaque valeur d'une variable déclarée bool ne prendrait que 1 bit. Ce n'est pas le cas, pour la raison simple que l'unité la plus petite est l'octet et non le bit.
    En C on faisait un #define char BOOL , ou int, je ne sais plus
    Le C++ a rajouté le mot-clé bool, mais cela ne change rien par ailleurs.
    C'est pourquoi je dis que le type booléen n'existe pas en C++.
    Mais dans un sujet ou la précision des termes ext examinée à la loupe, cela me paraissait important.

    bool est un mot-clé apparu avec le C++

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