J'ai beaucoup de mal =E0 comprendre comment =E7a fonctionne... Si j'ai
bien tout compris, on emploie const pour signifier que l'objet pass=E9
par r=E9f=E9rence ne sera pas modifi=E9 par la fonction, qu'il s'agit
juste d'un souci d'optimisation.
X f(const Y& y) : y ne sera pas modifi=E9 apr=E8s le retour de f
Dans le bout de code ci dessous, dans la fonction f je ne modifies pas
a et pourtant le const n'est appr=E9ci=E9 sur aucune des deux lignes de
la fonction.
class A
{
int a;
public:
A(int x=3D0,int y=3D0):a(x){;};
int geta(){return a;};
void seta(int x){a=3Dx;};
};
int f (const A& a, A& b)
{
b.seta(a.geta());
return a.geta();
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc Bourguet
"meow" writes:
Bonjour,
J'ai beaucoup de mal à comprendre comment ça fonctionne... Si j'ai bien tout compris, on emploie const pour signifier que l'objet passé par référence ne sera pas modifié par la fonction, qu'il s'agit juste d'un souci d'optimisation. X f(const Y& y) : y ne sera pas modifié après le retour de f
Dans le bout de code ci dessous, dans la fonction f je ne modifies pas a et pourtant le const n'est apprécié sur aucune des deux lignes de la fonction.
class A { int a; public: A(int x=0,int y=0):a(x){;}; int geta(){return a;}; void seta(int x){a=x;}; };
Il faut indiquer que geta ne modifie pas l'objet
int geta() const { return a; }
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"meow" <ben@agat.net> writes:
Bonjour,
J'ai beaucoup de mal à comprendre comment ça fonctionne... Si j'ai
bien tout compris, on emploie const pour signifier que l'objet passé
par référence ne sera pas modifié par la fonction, qu'il s'agit
juste d'un souci d'optimisation.
X f(const Y& y) : y ne sera pas modifié après le retour de f
Dans le bout de code ci dessous, dans la fonction f je ne modifies pas
a et pourtant le const n'est apprécié sur aucune des deux lignes de
la fonction.
class A
{
int a;
public:
A(int x=0,int y=0):a(x){;};
int geta(){return a;};
void seta(int x){a=x;};
};
Il faut indiquer que geta ne modifie pas l'objet
int geta() const { return a; }
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
J'ai beaucoup de mal à comprendre comment ça fonctionne... Si j'ai bien tout compris, on emploie const pour signifier que l'objet passé par référence ne sera pas modifié par la fonction, qu'il s'agit juste d'un souci d'optimisation. X f(const Y& y) : y ne sera pas modifié après le retour de f
Dans le bout de code ci dessous, dans la fonction f je ne modifies pas a et pourtant le const n'est apprécié sur aucune des deux lignes de la fonction.
class A { int a; public: A(int x=0,int y=0):a(x){;}; int geta(){return a;}; void seta(int x){a=x;}; };
Il faut indiquer que geta ne modifie pas l'objet
int geta() const { return a; }
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
meow
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué. 2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que
1. le compilo ne s'amuse pas à regarder si toutes les fonctions
modifient ou non la classe, il ne le fait que pour celles sur
lesquelles on a un "contrat const" comme tu l'as indiqué.
2. une fonction qui a un argument const ref ne peut utiliser que les
méthodes de cet objet qui ont eu le bon gout de poser un "contrat
const".
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué. 2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
Michel Michaud
Dans le message ,
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué.
Même s'il le voulait, il ne pourrait pas. Une fonction peut être déclarée sans être définie et le compilateur peut compiler du code qui appelle cette fonction avant qu'elle ne soit définie.
2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
En C++, ce n'est pas une question de goût, il faut que l'on déclare const les fonctions qui ne modifient pas l'objet (sauf membre mutable) si l'on veut pouvoir utiliser const ailleurs.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Dans le message 1123254641.462473.176690@z14g2000cwz.googlegroups.com,
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que
1. le compilo ne s'amuse pas à regarder si toutes les fonctions
modifient ou non la classe, il ne le fait que pour celles sur
lesquelles on a un "contrat const" comme tu l'as indiqué.
Même s'il le voulait, il ne pourrait pas. Une fonction peut
être déclarée sans être définie et le compilateur peut compiler
du code qui appelle cette fonction avant qu'elle ne soit définie.
2. une fonction qui a un argument const ref ne peut utiliser que les
méthodes de cet objet qui ont eu le bon gout de poser un "contrat
const".
En C++, ce n'est pas une question de goût, il faut que l'on déclare
const les fonctions qui ne modifient pas l'objet (sauf membre
mutable) si l'on veut pouvoir utiliser const ailleurs.
--
Michel Michaud mm@gdzid.com
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué.
Même s'il le voulait, il ne pourrait pas. Une fonction peut être déclarée sans être définie et le compilateur peut compiler du code qui appelle cette fonction avant qu'elle ne soit définie.
2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
En C++, ce n'est pas une question de goût, il faut que l'on déclare const les fonctions qui ne modifient pas l'objet (sauf membre mutable) si l'on veut pouvoir utiliser const ailleurs.
-- Michel Michaud http://www.gdzid.com FAQ de fr.comp.lang.c++ : http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
Jean-Marc Bourguet
"meow" writes:
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué.
Non seulement il ne s'amuse pas a le faire, mais il n'en a parfois pas la possibilite quand le code est separe en differents fichiers.
2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
Gagne.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
"meow" <ben@agat.net> writes:
dit comme ça, ça parrait évident :) merci !
juste pour etre cerain d'avoir pigé : ta réponse signifie que
1. le compilo ne s'amuse pas à regarder si toutes les fonctions
modifient ou non la classe, il ne le fait que pour celles sur
lesquelles on a un "contrat const" comme tu l'as indiqué.
Non seulement il ne s'amuse pas a le faire, mais il n'en a parfois pas
la possibilite quand le code est separe en differents fichiers.
2. une fonction qui a un argument const ref ne peut utiliser que les
méthodes de cet objet qui ont eu le bon gout de poser un "contrat
const".
Gagne.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
juste pour etre cerain d'avoir pigé : ta réponse signifie que 1. le compilo ne s'amuse pas à regarder si toutes les fonctions modifient ou non la classe, il ne le fait que pour celles sur lesquelles on a un "contrat const" comme tu l'as indiqué.
Non seulement il ne s'amuse pas a le faire, mais il n'en a parfois pas la possibilite quand le code est separe en differents fichiers.
2. une fonction qui a un argument const ref ne peut utiliser que les méthodes de cet objet qui ont eu le bon gout de poser un "contrat const".
Gagne.
A+
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
meow
Ok, oui, dit comme ça c'est vraiment logique. Je ne connais pas les mécanismes de compilation, mais avec la petite intuition que j'en ai j'arrive à recoller les morceaux. merci grandement pour toutes ces réponses.
Ok, oui, dit comme ça c'est vraiment logique. Je ne connais pas les
mécanismes de compilation, mais avec la petite intuition que j'en ai
j'arrive à recoller les morceaux.
merci grandement pour toutes ces réponses.
Ok, oui, dit comme ça c'est vraiment logique. Je ne connais pas les mécanismes de compilation, mais avec la petite intuition que j'en ai j'arrive à recoller les morceaux. merci grandement pour toutes ces réponses.