Faut-il vraiment forcer l'utilisation de r-values ?
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 :
Code:
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());
} |
Voici le code avec Rvalues :
- 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é...
Code:
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());
} |
Qu'est-ce qui est préférable ? Dans quelles conditions ? Et pourquoi ?
Merci d'avances pour vos réponses