j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en
créant une const et une non const, le compilateur
choisissait toujours la const s'il pouvait et la non const
sinon.
j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en
créant une const et une non const, le compilateur
choisissait toujours la const s'il pouvait et la non const
sinon.
j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en
créant une const et une non const, le compilateur
choisissait toujours la const s'il pouvait et la non const
sinon.
j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en créant
une const et une non const, le compilateur choisissait
toujours la const s'il pouvait et la non const sinon. Par
ex :
class A {
T &data() { return d ;}
const T &data() const { return d ;}
T d ;
}
Au contraire, il choisit toujours la méthode non const, sauf
s'il n'a pas le choix.
Ex (imaginons que T a une méthode print() const)
A a ;
a.data().print() ; // il appelle la non const
const A &aa = a ;
aa.data().print() ; // il appelle la const
J'utilise g++ 4.0.1, est-ce un bug de ce compilateur ?
Est-ce définit dans la norme comme ça ?
Est-ce par difficulté d'implémentation que ce comportement
existe ?
Ca ne parait pas génant, mais pour moi c'est très génant car
je veux un comportement différent dans le cas non const, car
ça veut dire que l'objet d va être modifié.
Merci pour tout éclairage, et merci encore plus si quelqu'un a
une solution :-).
j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en créant
une const et une non const, le compilateur choisissait
toujours la const s'il pouvait et la non const sinon. Par
ex :
class A {
T &data() { return d ;}
const T &data() const { return d ;}
T d ;
}
Au contraire, il choisit toujours la méthode non const, sauf
s'il n'a pas le choix.
Ex (imaginons que T a une méthode print() const)
A a ;
a.data().print() ; // il appelle la non const
const A &aa = a ;
aa.data().print() ; // il appelle la const
J'utilise g++ 4.0.1, est-ce un bug de ce compilateur ?
Est-ce définit dans la norme comme ça ?
Est-ce par difficulté d'implémentation que ce comportement
existe ?
Ca ne parait pas génant, mais pour moi c'est très génant car
je veux un comportement différent dans le cas non const, car
ça veut dire que l'objet d va être modifié.
Merci pour tout éclairage, et merci encore plus si quelqu'un a
une solution :-).
j'ai découvert récemment que je me trompais sur un point.
Je pensais que lorsqu'on surchargeait une méthode en créant
une const et une non const, le compilateur choisissait
toujours la const s'il pouvait et la non const sinon. Par
ex :
class A {
T &data() { return d ;}
const T &data() const { return d ;}
T d ;
}
Au contraire, il choisit toujours la méthode non const, sauf
s'il n'a pas le choix.
Ex (imaginons que T a une méthode print() const)
A a ;
a.data().print() ; // il appelle la non const
const A &aa = a ;
aa.data().print() ; // il appelle la const
J'utilise g++ 4.0.1, est-ce un bug de ce compilateur ?
Est-ce définit dans la norme comme ça ?
Est-ce par difficulté d'implémentation que ce comportement
existe ?
Ca ne parait pas génant, mais pour moi c'est très génant car
je veux un comportement différent dans le cas non const, car
ça veut dire que l'objet d va être modifié.
Merci pour tout éclairage, et merci encore plus si quelqu'un a
une solution :-).
Merci beaucoup pour cette réponse précise et détaillée.
J'avoue quand même que je n'ai pas tout compris sur le
principe de la classe Proxy.
la class A sera donc
class A {
ProxyT &data() { return d ;}
const ProxyT &data() const { return d ;}
T d ;
}
C'est ça ?
J'avoue que je n'ai pas compris la subtilité avec l'operateur =
On l'utilise toujours
data().machin = 2 ? si machin est un champ de T ?
Merci beaucoup pour cette réponse précise et détaillée.
J'avoue quand même que je n'ai pas tout compris sur le
principe de la classe Proxy.
la class A sera donc
class A {
ProxyT &data() { return d ;}
const ProxyT &data() const { return d ;}
T d ;
}
C'est ça ?
J'avoue que je n'ai pas compris la subtilité avec l'operateur =
On l'utilise toujours
data().machin = 2 ? si machin est un champ de T ?
Merci beaucoup pour cette réponse précise et détaillée.
J'avoue quand même que je n'ai pas tout compris sur le
principe de la classe Proxy.
la class A sera donc
class A {
ProxyT &data() { return d ;}
const ProxyT &data() const { return d ;}
T d ;
}
C'est ça ?
J'avoue que je n'ai pas compris la subtilité avec l'operateur =
On l'utilise toujours
data().machin = 2 ? si machin est un champ de T ?