La classe semble marcher correctement, sauf que a l'usage, la version
const de l'operateur n'est jamais appelé.
Par exemple :
String MaChaine ("...");
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé
(normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant
je m'attendait a ce que ce soit la version const dans ce cas, puisque
la chaine n'est pas modifiée.
Bien que point de vue de l'utilisateur tout semble normal, en interne
les deux operateur ne font pas du tout la meme chose. Notament, les
chaines peuvent etre partagée entre plusieurs instance et la version non
const duplique les chaines si necessaire avant d'effectuer l'operation,
pas la version const. Le principal interet de la classe disparait donc.
Comment corriger cela pour que la version const soit utilisé quand c'est
possible ?
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé (normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant je m'attendait a ce que ce soit la version const dans ce cas, puisque la chaine n'est pas modifiée.
Il faut peut-être déclarer la version 'const' comme ceci :
const char operator[] (size_t) const;
(fonction constante, valeur de retour constante).
Bon, je n'ai pas essayé, je ne sais pas si ça fonctionnera...
Vincent
-- SL> Au fait elle est mieux ma signature maintenant ? Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon. -+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
J'ai crée une classe chargée de maintenir une chaine de caractere
dynamique. J'y a ajoutés deux operateur []. La classe se présente ainsi :
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé
(normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant
je m'attendait a ce que ce soit la version const dans ce cas, puisque
la chaine n'est pas modifiée.
Il faut peut-être déclarer la version 'const' comme ceci :
const char operator[] (size_t) const;
(fonction constante, valeur de retour constante).
Bon, je n'ai pas essayé, je ne sais pas si ça fonctionnera...
Vincent
--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé (normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant je m'attendait a ce que ce soit la version const dans ce cas, puisque la chaine n'est pas modifiée.
Il faut peut-être déclarer la version 'const' comme ceci :
const char operator[] (size_t) const;
(fonction constante, valeur de retour constante).
Bon, je n'ai pas essayé, je ne sais pas si ça fonctionnera...
Vincent
-- SL> Au fait elle est mieux ma signature maintenant ? Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon. -+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-
Stéphane Poulet
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const. Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Laurent DELEPINE wrote:
Bonjour,
J'ai crée une classe chargée de maintenir une chaine de caractere dynamique. J'y a ajoutés deux operateur []. La classe se présente ainsi :
La classe semble marcher correctement, sauf que a l'usage, la version const de l'operateur n'est jamais appelé.
Par exemple : String MaChaine ("...");
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé (normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant je m'attendait a ce que ce soit la version const dans ce cas, puisque la chaine n'est pas modifiée.
Bien que point de vue de l'utilisateur tout semble normal, en interne les deux operateur ne font pas du tout la meme chose. Notament, les chaines peuvent etre partagée entre plusieurs instance et la version non const duplique les chaines si necessaire avant d'effectuer l'operation, pas la version const. Le principal interet de la classe disparait donc.
Comment corriger cela pour que la version const soit utilisé quand c'est possible ?
A+
LD
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est
appliqué à un objet de type const.
Ex :
const String s;
...
s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Laurent DELEPINE wrote:
Bonjour,
J'ai crée une classe chargée de maintenir une chaine de caractere
dynamique. J'y a ajoutés deux operateur []. La classe se présente ainsi :
La classe semble marcher correctement, sauf que a l'usage, la version
const de l'operateur n'est jamais appelé.
Par exemple :
String MaChaine ("...");
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé
(normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant
je m'attendait a ce que ce soit la version const dans ce cas, puisque
la chaine n'est pas modifiée.
Bien que point de vue de l'utilisateur tout semble normal, en interne
les deux operateur ne font pas du tout la meme chose. Notament, les
chaines peuvent etre partagée entre plusieurs instance et la version non
const duplique les chaines si necessaire avant d'effectuer l'operation,
pas la version const. Le principal interet de la classe disparait donc.
Comment corriger cela pour que la version const soit utilisé quand c'est
possible ?
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const. Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Laurent DELEPINE wrote:
Bonjour,
J'ai crée une classe chargée de maintenir une chaine de caractere dynamique. J'y a ajoutés deux operateur []. La classe se présente ainsi :
La classe semble marcher correctement, sauf que a l'usage, la version const de l'operateur n'est jamais appelé.
Par exemple : String MaChaine ("...");
MaChaine[x] = 'X'; <-- la c'est l'operateur non const qui est appelé (normal).
char c = MaChaine[x]; <-- la aussi c'est l'operateur non const. Pourtant je m'attendait a ce que ce soit la version const dans ce cas, puisque la chaine n'est pas modifiée.
Bien que point de vue de l'utilisateur tout semble normal, en interne les deux operateur ne font pas du tout la meme chose. Notament, les chaines peuvent etre partagée entre plusieurs instance et la version non const duplique les chaines si necessaire avant d'effectuer l'operation, pas la version const. Le principal interet de la classe disparait donc.
Comment corriger cela pour que la version const soit utilisé quand c'est possible ?
A+
LD
Laurent DELEPINE
Stéphane Poulet wrote:
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const. Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la declaration const de l'operateur.
A+
LD
Stéphane Poulet wrote:
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est
appliqué à un objet de type const.
Ex :
const String s;
...
s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la
declaration const de l'operateur.
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const. Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la declaration const de l'operateur.
A+
LD
kanze
Laurent DELEPINE wrote in message news:<3f565f50$0$26405$... Stéphane Poulet wrote:
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const.
Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la declaration const de l'operateur.
Ça dépend. L'objet en question est const. C'est donc bien l'opérateur const qui serait appelé. Indépendamment de ce qu'il fait ailleurs dans l'expression. Maintenant, dans son cas, le type de retour de l'opérateur [] const n'était pas légal au côté gauche d'une affectation, ce qui provoquera une erreur de compilation. Mais l'erreur n'est pas parce qu'il a voulu appelé l'opérateur const en soi ; c'est bien au cause de son type de retour.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Laurent DELEPINE <newsgroup@webiologie.org> wrote in message
news:<3f565f50$0$26405$626a54ce@news.free.fr>...
Stéphane Poulet wrote:
Si je ne me trompe pas, ton opérateur const ne sera appelé que si
c'est appliqué à un objet de type const.
Ex :
const String s;
...
s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la
declaration const de l'operateur.
Ça dépend. L'objet en question est const. C'est donc bien l'opérateur
const qui serait appelé. Indépendamment de ce qu'il fait ailleurs dans
l'expression. Maintenant, dans son cas, le type de retour de l'opérateur
[] const n'était pas légal au côté gauche d'une affectation, ce qui
provoquera une erreur de compilation. Mais l'erreur n'est pas parce
qu'il a voulu appelé l'opérateur const en soi ; c'est bien au cause de
son type de retour.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Laurent DELEPINE wrote in message news:<3f565f50$0$26405$... Stéphane Poulet wrote:
Si je ne me trompe pas, ton opérateur const ne sera appelé que si c'est appliqué à un objet de type const.
Ex : const String s; ... s[15] = 'x'; // ce sera l'operateur const qui sera appelé
Je ne crois pas. Ici l'objet est modifié, ce qui est contraire a la declaration const de l'operateur.
Ça dépend. L'objet en question est const. C'est donc bien l'opérateur const qui serait appelé. Indépendamment de ce qu'il fait ailleurs dans l'expression. Maintenant, dans son cas, le type de retour de l'opérateur [] const n'était pas légal au côté gauche d'une affectation, ce qui provoquera une erreur de compilation. Mais l'erreur n'est pas parce qu'il a voulu appelé l'opérateur const en soi ; c'est bien au cause de son type de retour.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16