Return value optimization
In C++, writing a function with a compound return statement like thisconst Rational function (void)
{
....
return Rational (a,b); // statement 1
}
can be more efficient than
const Rational function (void)
{
....
Rational r(a,b);
return r; // statement 2
}
when used in the surrounding context such as
main()
{
Rational c = function (); // initializing c.
}
because compilers can avoid "invisible" creation and
destruction of temporaries when function returns an object
by value. This is known as "return value optimization".
In the optimized assembly code, object c is directly
initialized by statement 1. You save upto 2 temporaries (and
creation/destruction of them). One is the local object
r and other one is created and destroyed when the
function returns.