Disons que j'ai une fonction:Les valeurs de retour vont-elles être passées par la référence rvalue dans C++ 0x?
typedef std::vector<int> VecType;
VecType randomVector();
int processing()
{
VecType v = randomVector();
return std::accumulate(v.begin(), v.end(), 0);
}
Est-ce que C++ 0x dire spécifiquement la copie parasite sera évitée de la valeur de retour de randomVector? Ou un compilateur aurait-il besoin de mettre en œuvre le RVO? Il me semble que la valeur randomVector()
devrait être traitée comme un rvalue, et donc le constructeur de déplacement de v devrait être appelé, mais je ne suis pas complètement sûr que ce soit vrai.
Pas une bonne question, à mon humble avis. La norme ne peut pas utilement indiquer ce qu'une mise en œuvre PEUT faire, seulement ce qu'elle DOIT faire. –
En fait, dans l'exemple que vous avez donné Return Value Optimization est effectuée par la plupart des compilateurs ... Donc, il est efficace sans rvalue. De même, rvalue est plus important pour passer des arguments aux fonctions. – Artyom
Le titre de la question est un peu trompeur. Votre fonction renvoie une valeur et non une référence. Mais une référence rvalue peut s'y lier, ce qui arrive si l'élision de la copie ne peut pas être effectuée pour une raison quelconque et que le type possède un constructeur de mouvement (Le paramètre du constructeur de déplacement est une référence rvalue) – sellibitze