Je possède ce structLe constructeur Rvalue n'est pas appelé?
struct A {
A() { cout << "Default\n"; }
A(const A& a) { cout << "Const lvalue\n"; }
A(const A&& a) { cout << "Const rvalue\n"; }
A(A& a) { cout << "Lvalue\n"; }
A(A&& a) { cout << "Rvalue\n"; }
};
que j'utilise pour comprendre rvalues / lvalues.
Quand vous faites
A a1;
A a2{ a1 };
const A a3;
A a4{ a3 };
Il produit correctement
> Default
> lvalue
> Default
> Const lvalue
Le problème est que quand je fais quelque chose comme
A a{ A() };
La sortie est par défaut. Mais n'est-ce pas A()
un rvalue là? Ne faut-il pas appeler A::A(A&&)
ou A::A(const A&&)
? Que se passe-t-il ici?
Qu'il me soit permis de vous diriger vers [ 'std :: move'] (http://en.cppreference.com/ w/cpp/utilitaire/move) – InternetAussie
Merci, cela a résolu le problème, mais pourquoi dans l'exemple je n'ai donné aucun constructeur a été appelé? – Garmekain
Le constructeur de copie n'est pas certain d'être appelé. Dans ce cas, le compilateur a probablement créé 'A()' directement à la place de 'a' sans copier. – zoska