Zwracanie statica w funkcji

0

Generalnie chodzi o to, że nie do końca rozumiem, dlaczego przy zwracaniu statica przez wartość tworzy się gdzieś kopia. Tak jak w poniższym przykładzie:

include <iostream>
using namespace std;

class Test
{
	public:
	Test(){cout << "Oryginal." << endl;}
	Test(const Test& copy)
	{
		cout << "Kopia." << endl;
	}
};

Test foo()
{
	static Test test;
	return test;
}

int main()
{
	foo();
	return 0;
} 

W outpucie wychodzi:
Oryginal.
Kopia.

Pytanie dlaczego jest wywolywany konstruktor kopiujacy? Oczywiscie bez statica tego zjawiska nie ma.

4

Funkcja musi zwrócić kopie obiektu - ze względu na static compiler magic nie dochodzi do skutku

0

Wow, szybka odpowiedz, dzieki:)

1

Wywołaj foo dwa razy, ze staticem i bez, to zobaczysz dlaczego :)

0

kurde, ale czegos dalej nie rozumiem:

#include <iostream>
using namespace std;

class Test
{
//
};

Test foo()
{
	Test test;
	cout << &test << endl;
	return test;
}

int main() {

	Test t = foo();
	cout << &t << endl;
	return 0;
} 

Dlaczego tutaj oba adresy sa te same? Przeciez nie zwracamy przez referencje, tylko przez wartosc. Jesli te same operacje robie w funkcji zwracajacej np inta, to adresy sa inne. Zwariowalem:) Pytalem programisty, ale tez nie wiedzial.

5

Obstawiam, że nastąpił copy elision. Kompilator widząc, że obiekt w funkcji został stworzony tylko po to, żeby być przypisanym do tego main, od razu utworzył go tam gdzie ten w main ma być.

0

o, ciekawa sprawa:) dzieki wielkie jeszcze raz!

1 użytkowników online, w tym zalogowanych: 0, gości: 1