J'ai un struct qui stocke un entier:Comprendre que le constructeur est appelé
struct foo {
int value;
foo(int value) : value(value) {
std::cout << "value constr\n";
}
foo(foo const&) {
std::cout << "copy constr\n";
}
foo(foo&&) {
std::cout << "move constr\n";
}
};
Dans la principale méthode que je fais ce qui suit:
foo bar = foo(foo(foo(42)));
À ce moment-là, je pense le constructeur habitude d'être appelé d'abord, puis déplacer le constructeur plusieurs fois parce que l'argument sera un rvalue. Cependant, la sortie est seulement "value constr".
Pourquoi ni les moteurs de copie ni de déplacement ne sont appelés et que se passe-t-il réellement dans cet exemple?