operator+= vs operator+ - C++ - Programmation
Marsh Posté le 31-03-2011 à 16:13:26
in_your_phion a écrit : |
a += b evite une copie inutile.
in_your_phion a écrit : |
s1 + c1 c'est string::operator+(char*)
c1 + s2 c'est operator+(char*,string)
En general les gens civilisés ecrivent operator+(X,Y) non friend en appelant +=
Code :
|
pas de friend, pas de copie
Marsh Posté le 31-03-2011 à 16:24:24
hello,
merci! mais je ne comprend pas tout
Joel F a écrit : |
où est ce que la copie ce fait quand on fait a = a + b ?
car pour moi cela équivaut à a = a.operator+(b), donc juste des affectations
Joel F a écrit :
|
on n'est pas obligé de mettre de type de retour ?
haa... la il y a une copie ok! mais dans le cas où ce n'est pas friendly, il n'y a jamais de copie non ?
merci
Marsh Posté le 01-04-2011 à 11:10:34
hello & up
Joel F a écrit :
|
est ce que ça veut dire que pour a = a + b on a :
- creation d'un buffer temporaire a1, où l'on stoque a + b (addition)
- creation d'un second buffer temoraire a2 où l'on copie a+b (égal)
alors que pour a+=b, on a :
- creation d'un buffer temporaire a2, où l'on stoque a + b (addition et egal)
c'est ça ?
Joel F a écrit :
|
par contre la je comprend toujours pas ...
Marsh Posté le 01-04-2011 à 14:26:50
Dans "a = a + b", il y a d'abord un appel a "string operator+(const string& )" qui retourne donc un nouvel objet. Ensuite il y a appel a l'operateur d'affectation (operator=) pour copier cet objet temporaire dans a.
Alors que "a += b", il y a un appel a operator+= qui se contente d'ajouter au buffer de a le contenu de b.
Enfin, dans s1 + c1, vu que s1 est avant c1, le compile appel string::operator+(char*) (et vice versa pour c1 + s2)
Marsh Posté le 04-04-2011 à 10:12:44
mr simon a écrit : Enfin, dans s1 + c1, vu que s1 est avant c1, le compile appel string::operator+(char*) (et vice versa pour c1 + s2) |
hello,
merci pour ta réponse, je crois que j'ai compris pour le 1.
Par contre le 2. pour moi c'est :
s1 + c1, qui équivaut à s1.operator+( String(c1) ) ....ok là je comprend
c1 + s2 .... le je pige plus .... car pour moi ce serait donc c1 qui est convertit en String, donc ensuite, c'est juste c1.operator+(String& ) qui serait appelé, puisque que c1 est déjà une String et non plus une C-String ....
help me ...
Marsh Posté le 31-03-2011 à 14:16:06
bonjour,
j'aimerais savoir s'il y a une difference avec les operateur "+" et "+=" quand on additionne deux string par exemple ?
?
est ce que l'un est plus rapide que l'autre ? y'a t'il une différence?
merci
ps:j'ai une autre question, pour le code suivant "friendly string operator" :
Je ne comprend pas pourquoi s4 = s1 + c1; appel operator+ avec un seul argument, alors que s5 = c1 + s2; appelle celui avec deux argument, car dans les deux cas il y a une conversion implicite de char* en string.
merci...
Message édité par in_your_phion le 31-03-2011 à 14:27:48