En C ++ 11 si à la fois les affectations de copie et de déplacement sont disponibles, le compilateur choisit automatiquement l'affectation de copie si l'argument est lvalue et déplacer l'affectation s'il s'agit de rvalue. En utilisant std::move
il est possible de sélectionner explicitement l'affectation de déplacement pour lvalue. Mais comment est-il possible de sélectionner explicitement l'affectation de copie pour rvalue?
Exemple de code:
#include <iostream>
class testClass
{
public:
testClass &operator=(const int &other) {
std::cout << "Copy assignment chosen." << std::endl;
return *this;
}
testClass &operator=(int &&other) {
std::cout << "Move assignment chosen." << std::endl;
return *this;
}
};
int main(int argc, char *argv[])
{
int a = 4;
testClass test;
test = a; // Selects copy assignment
test = 3; // Selects move assignment
test = std::move(a); // Selects move assignment
// test = std::copy(3); // <--- This does not work
return 0;
}