Posté par fearan .
En réponse au journal Le quiz c++ de l'été.
Évalué à 5.
Dernière modification le 24 août 2018 à 09:58.
Ici y a rien de sorcier, dans le cas de la copie du paramètre pour le stocker ensuite, en C++11, on va avoir (copie + déplacement), en pré c++11 on aura 2 copie; dans les deux cas le résultat est strictement identique.
Le cas du passage de référence et plus taquin mais on aurait exactement le même problème en pointeur nu, ou en référence sans shared_ptr; si la ressource est désallouée par un autre thread on a une référence sur nulle part (ou un pointeur sur nulle part)
tout ça pour ce qui est essentiellement des micros optimizations impossible à mesurer pour la majorité des cas d’usages.
c'est ce qui permet de retourner un conteneur de plusieurs dizaines de milliers d'éléments (potentiellement complexe) sans passer par des pointeurs (du point de vue codeur).
Presque tous les autres langages passent par référence, mais pas toujours; si tu veux qu'on parle des truc marrant de java ou python, justement sur le passage de paramètre
Comment changer une String, un int, ou un Float passé en paramètre d'une fonction en java ? Alors que la quasi totalité des objets ça se fait sans se poser de question.
Pourquoi ce p* de paramètre par défaut en python change à chaque appel ?
Toujours de ce qui en découle, hormis quelques objets, il est impossible de filer un objet en paramètre ou retour d'une fonction (ou d'un objet) et d'être certain qu'il ne va pas être modifié; Alors tu as bien les ImmutableList, mais c'est du runtime. La seule solution c'est de passer par des copies... Là où une const& fait parfaitement l'affaire.
Le c++ n'est pas parfait, loin de là, il permet de faire des grosses boulettes, mais je ne connais aucun langage permettant facilement le choix entre copie/référence, const/mutable (y a pas que ça mais c'est le fil du thread)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Godbolt
Posté par fearan . En réponse au journal Le quiz c++ de l'été. Évalué à 5. Dernière modification le 24 août 2018 à 09:58.
Ici y a rien de sorcier, dans le cas de la copie du paramètre pour le stocker ensuite, en C++11, on va avoir (copie + déplacement), en pré c++11 on aura 2 copie; dans les deux cas le résultat est strictement identique.
Le cas du passage de référence et plus taquin mais on aurait exactement le même problème en pointeur nu, ou en référence sans shared_ptr; si la ressource est désallouée par un autre thread on a une référence sur nulle part (ou un pointeur sur nulle part)
c'est ce qui permet de retourner un conteneur de plusieurs dizaines de milliers d'éléments (potentiellement complexe) sans passer par des pointeurs (du point de vue codeur).
Presque tous les autres langages passent par référence, mais pas toujours; si tu veux qu'on parle des truc marrant de java ou python, justement sur le passage de paramètre
Toujours de ce qui en découle, hormis quelques objets, il est impossible de filer un objet en paramètre ou retour d'une fonction (ou d'un objet) et d'être certain qu'il ne va pas être modifié; Alors tu as bien les ImmutableList, mais c'est du runtime. La seule solution c'est de passer par des copies... Là où une const& fait parfaitement l'affaire.
On en arrive à ce genre de truc http://www.javapractices.com/topic/TopicAction.do?Id=15 ; devoir faire des copies inutiles, des constructions d'objets des allocations...
Le c++ n'est pas parfait, loin de là, il permet de faire des grosses boulettes, mais je ne connais aucun langage permettant facilement le choix entre copie/référence, const/mutable (y a pas que ça mais c'est le fil du thread)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent