#include <iostream>
struct A
{
A() { std::cout << "Def Constr\n"; }
A(const A&) { std::cout << "Copy Constr\n"; }
};
A func1()
{
return A{};
}
void func2(A a) {}
int main()
{
func2(func1());
}
Après avoir compilé avecCopie Elision Misunderstanding
g ++ Copy.cpp std = C++ 11 -fno-Elide-constructeurs
sortie est:
Def Constr
Copier Constr
Copie Constr
Et mes questions est la suivante: Pourquoi 2 Copie Constr? Je pensais qu'une seule copie était nécessaire.
Je devine peut-être que func1() lance un objet temp et cet objet temp doit être copié dans une autre zone de mémoire et à partir de cette région une copie doit être faite pour le paramètre func2() mais c'est vague pour moi .
Pourriez-vous expliquer en détail s'il vous plaît?
Je me demande comment le résultat sera différent si func2 prend la référence const. –