#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());
}
po kompilacji zkopiowania wyrzutnia nieporozumień
g ++ Copy.cpp -std = C++ 11 -fno-Elide-konstruktory
wyjścia:
Def Constr
Kopiuj Constr
Kopiowanie Constr
I moje pytanie brzmi: Dlaczego 2 Kopiowanie Constr? Myślałem, że potrzebna jest tylko 1 kopia.
Mogę zgadywać, że func1() rzuca obiekt tymczasowy, a ten obiekt tymczasowy musi zostać skopiowany do innego regionu pamięci, az tego regionu musi zostać utworzona kopia dla parametru func2(), ale jest dla mnie niejasna .
Czy mógłbyś wyjaśnić to szczegółowo?
Zastanawiam się, jak wynik będzie inny, jeśli func2 przyjmuje odwołanie do const. –