Bonjour cher Forumers,
Je dispose d'une fonction (contexte) dont le rôle est d'instancier un objet, puis de le passer à une autre fonction.
Clairement, le compilateur va optimiser le passage pour éviter de recopier l'objet. Mais faut-il insister en forçant l'utilisation de Rvalues ?
Voici le code initial :
Voici le code avec Rvalues :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class DerivedType> void operator()(DerivedType& to_insert) const{ auto buffer = deriveds.template insert<DerivedType&>(to_insert); //<-- Création start_visit(buffer); //<-- Passage } template <class Buffer> void start_visit(Buffer buffer) const{ //<-- Réception auto visitor = get_visitor(buffer); visitor.start_visit(buffer.top()); }
- Un inconvenient des rvalues, c'est de rendre la lecture moins simple.
- Et qu'il faut s'assurer que l'objet ne sera pas réutilisé...
Qu'est-ce qui est préférable ? Dans quelles conditions ? Et pourquoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class DerivedType> void operator()(DerivedType& to_insert) const{ auto&& buffer = deriveds.template insert<DerivedType&>(to_insert); //<-- Création start_visit(buffer); //<-- Passage } template <class Buffer> void start_visit(Buffer&& buffer) const{ //<-- Réception auto visitor = get_visitor(buffer); visitor.start_visit(buffer.top()); }
Merci d'avances pour vos réponses
Partager