J'ai écrit une classe de test mais je n'arrive pas à comprendre ce qui se passe !
Est-ce que le Move/copy est élidé ? Si oui, comment pourrait-il être mis à jour avec la nouvelle valeur ?
Voici le cas de test (ne tenez pas compte de l'utilité)
#include<iostream>
struct Test
{
int a;
Test(){a = 10;std::cout<<"def\n";}
Test(int a){this->a = a;std::cout<<"unary\n";}
Test(const Test& a){this->a = a.a; std::cout<<"copy\n";}
Test(Test&& a){this->a = a.a; std::cout<<"Move\n";}
Test& operator=(const Test& a){this->a = a.a;std::cout<<"op=\n";}
Test& operator=(Test&& a){this->a = a.a;std::cout<<"Move=\n";}
void display(){std::cout << "Display ";}
};
Test gi(Test a)
{
std::cout<<a.a<<"&\n";
return a;
}
int main()
{
//Test a = 99;
//Test();
/*Line MST*/ Test b = Test(102);//gi(a);
std::cout<<b.a<<'\n';
return 0;
}
C'est la ligne MST que je ne comprends pas. Si je l'initialise avec un fichier temporaire Test
ne devrait-il pas appeler le constructeur Move (ou au moins la copie) ?
la sortie est :
unary
102
résultat similaire avec cette ligne
Test b = gi(Test(103));
Ici, le déplacement/la copie n'a pas lieu lors de l'appel à gi() ?
mais c'est ce à quoi je m'attendais
Test a = 99;
Test b = gi(a);
Qu'est-ce qui m'échappe ?