J'ai ce C++ extrait de code de test,ne peut pas lier lvalue à la référence rvalue
#include <vector>
class A {
std::vector<int> x;
public:
A(std::vector<int>&& _x) : x(_x) {}
};
class B {
A a;
public:
B(std::vector<int>&& _x) : a(/*move(*/_x/*)*/) {}
};
Je passe _x
à B comme référence rvalue, mais il devient converti à lValue lorsqu'il est passé dans le constructeur de A
et je dois utiliser std::move()
pour le faire fonctionner. Ma question est pourquoi _x est lvalue et non une référence de référence dans a()
?
Alors que le type de '_x' est une 'référence de valeur r à std :: vector', il s'agit toujours d'une valeur l car elle a un nom. Vous pourriez vouloir l'utiliser plus d'une fois dans votre constructeur, ainsi il ne devrait pas être déplacé de la première utilisation à moins que vous ne le souhaitiez explicitement. –
Corristo
@Corristo pouvez-vous afficher cela comme réponse? – Samik