wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 3

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» iterator et const
Conversation : iterator et const
24-08-2008 01:55:50  iterator et const #1
gbdivers (Membre)
Inscrit le : 05-03-2008
Messages: 92
Snippets: 2
Tutoriels: 0
Hors ligne
Bonjour a tous

petite question concernant l'attribut "const"...

j'ai une fonction begin() permettant de me retourner un iterateur sur le premier element d'un vecteur :

Code Cpp:

 
class A
{
    vector<double> m_MonVecteur;
    public:
    A() {}
    A(const A& a);
    vector<double>::iterator begin();
};
 
vector<double>::iterator A::begin()
{
    return m_MonVecteur.begin();
}


Rien de compiqué et ca marche parfaitement.
Maintenant, si je souhaite definir cette fonction en constante (puisque cette fonction ne modifie pas l'objet A, théoriquement je dois pouvoir le faire) :

Code Cpp:

vector<double>::iterator A::begin() const
{
    return m_MonVecteur.begin();
}

et là, erreur de compilation...
Ca passe en utilisant des const_iterator, mais dans ce cas, je ne peux plus modifier le contenu de mon vecteur :

Code Cpp:

vector<double>::const_iterator A::begin() const
{
    return m_MonVecteur.begin();
}


Comment faire pour utiliser ma fonction A.begin() dans une autre fonction dans ces conditions ?

Code Cpp:

A::A(const A& a)
{
    vector<double>::iterator a.begin();
...
error : passing `const A' as `this' argument of `vector<double>::iterator A::begin()' discards qualifiers

Dernière modification par gbdivers (24-08-2008 02:11:07)

25-08-2008 07:50:02  Re: iterator et const #2
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 222
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
Tu peux créer les deux fonctions avec et sans le const. A la compilation il prendra celle qui faut automatiquement ?

"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
25-08-2008 09:45:01  Re: iterator et const #3
gbdivers (Membre)
Inscrit le : 05-03-2008
Messages: 92
Snippets: 2
Tutoriels: 0
Hors ligne
En effet, c'est d'ailleurs ce que fait la STL.
Et c'est la première version (celle sans "const") qui est appelé.

Au final, j'ai retiré tous les "const" de mon programme et ça marche très bien (et ca marche très bien depuis des années sans les "const"... quelle idée j'ai eu de vouloir les utiliser...)

Mais globalement, je ne comprends pas pourquoi ça ne marche pas avec les "const"

Je ne connais pas les pratiques usuelles dans le milieu professionel de l'informatique. Est-ce que du code "propre" utilise les "const" quand c'est nécessaire ?

(et oui, j'aime me prendre la tête sur des problèmes alors que mon programme fonctionne très bien :))

Dernière modification par gbdivers (25-08-2008 09:45:53)

25-08-2008 10:37:25  Re: iterator et const #4
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 222
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
le const je dirais qu'il sert à deux choses :
-indiqué que la variable ne va pas changer.
-veiller à ce qu'on ne puisse pas modifier cette variable pour une raison X ou Y.

Mais je dois avouer que le const est comme un gage de qualité pas forcément simple à mettre en place.

Mais en générale il sert pour le passage par référence de paramètres. C'est plus rapide mais on perd la sécurité de la copie. On rajoute alors le const, qui veille à ce que la variable ne soit pas modifiée.

Humm en entreprise je dirais :
ça dépend de la méthode de travail de l'entreprise. Moi je le fais pas souvent. Mais chez moi pour mon projet oui j'essaie au mieux de le faire.

"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
25-08-2008 11:19:24  Re: iterator et const #5
gbdivers (Membre)
Inscrit le : 05-03-2008
Messages: 92
Snippets: 2
Tutoriels: 0
Hors ligne
L'utilisation que j'en fait est légerement différente puisque le "const" s'applique à une méthode d'un objet et pas à une variable.
Théoriquement, cela indique que l'objet n'est pas modifié par l'appel de cette méthode.

Mais effectivement, c'est plus un gage de qualité et de sécurité et c'est jamais indispensable. Donc je vais faire sans... De toute façon, n'étant pas informaticien, il y a beaucoup de normes d'écriture que je ne connais pas. Mon code ne doit surement pas être très joli pour un spécialiste :) Quand je diffuserais le code source, je risque de me faire taper sur les doigts par ceux qui voudront travailler dessus...
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» iterator et const