30 votes

Sélectionner explicitement l'affectation de copie

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;
}
 

8voto

rahnema1 Points 9765

Vous pouvez static_cast à const int& :

 test = static_cast<const int&>(3);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X