Je le code suivant:manière appropriée de transmettre la référence rvalue
#include <iostream>
#include <string>
using std::cout;
using std::endl;
void bar(const std::string& str)
{
cout << "const str - " << str << endl;
}
void bar(std::string&& str)
{
cout << "str - " << str << endl;
}
void foo(std::string&& str)
{
bar(str);
}
int main()
{
foo("Hello World");
}
Dans le code ci-dessus la void bar(const std::string& str)
surcharge est appelée. Si je veux le vide bar(std::string&& str)
surcharge à appeler soit je dois écrire bar(std::move(str));
ou bar(std::forward<std::string>(str));
Il est évident que le code est plus en avant, mais il est plus logique pour moi. Ma question est ce qui est le plus couramment utilisé et préféré. L'écriture bar(std::forward(str));
serait la meilleure solution imo, mais ce n'est pas une option :)
Vous pouvez le déplacer, l'avant devrait être utilisé dans le code de modèle si vous ne pouvez pas être sûr si c'est la référence de rvalue ou de lvalue. :) Dans le code modélisé && signifie référence universelle, qui peut être soit rvalue ou lvalue. – Melkon
@Melko Si vous faites votre commentaire une réponse, je peux l'accepter :) – rozina
Merci, je le fais. :) – Melkon