#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());
}
Dopo aver compilato conCopia Elision Incomprensione
g ++ Copy.cpp -std = C++ 11 -fno-Elide, a costruttori
output è:
Def Constr
Copia Constr
Copia Constr
E le mie domande è: perché 2 Copia Constr? Pensavo che fosse necessaria solo una copia.
Potrei supporre che func1() lanci un oggetto temporaneo e che questo oggetto temporaneo debba essere copiato in un'altra area di memoria e da quella regione di nuovo una copia deve essere fatta per il parametro func2() ma è vaga per me .
Potresti spiegarlo in dettaglio per favore?
Mi chiedo come il risultato sarà diverso se func2 prende riferimento const. –