"The rational prisoner exploits the weak places, creates order from chaos: instead, collectives like the FSF vindicate their jailers by building cells almost compatible with the existing ones, albeit with more features."
To što tebi treba je RVO (return value optimization), koju podržava MSVC a verovatno još
kompajlera, čini mi se i GCC. Problem je što ta optimizacija neće uvek raditi, evo primera:
Code:
Vector getVec( float X, float Y, float Z )
{
Vector ret(X,Y,Z);
return ret;
}
U ovom slučaju, kompajler neće uraditi ništa, dok će u sledećem potpuno eleminisati copy-constructor:
Code:
Vector getVec( float X, float Y, float Z )
{
return Vector(X,Y,Z);
}
nrvo_test RVO(int value) {
return nrvo_test(value); //ovako se pomaze kompajleru da uradi rvo optimizaciju
} //dakle povratna vrednost se generise uz pomoc konstruktora
//u povratnom delu funkcije
Videces kad iskompajliras ovaj program koliko puta je pozvan konstruktor i destruktor i po tome mozes da zakljucis da li je optimizacija izvrsena ili ne.
[Ovu poruku je menjao kiklop74 dana 10.08.2006. u 14:02 GMT+1]
Code: nrvo_test RVO(int value) {
return nrvo_test(value); //ovako se pomaze kompajleru da uradi rvo optimizaciju
}
Znaci ovo bi trebalo uvijek raditi.
Nema definitivnog odgovora na to pitanje. U vecini slucajeva verovatno da. Kao i sve drugo u programiranju sve zavisi od okolnosti kao i od tipa kompajlera, opcija za optimizaciju itd.