Question: is it OK to rely on compiler optimizations while coding?
Let's say I need to calculate calculateF
and calcuateG
which both depend on another value returned by getValue
. Sometimes I need both values, some other times I only need one of those values.
// some function
double getValue(double value)
{
double val(0.0);
// do some math with value
return val;
}
// calculateF depends on getValue
double calculateF(double value)
{
double f(0.0);
auto val = getValue(value);
// calculate f which depends on val (and value)
return f;
}
// calculateG depends on getValue
double calculateG(double value)
{
double g(0.0);
auto val = getValue(value);
// calculate g which depends on val (and value)
return g;
}
Now, I could write this more elegantly:
std::pair<double,double> calculateFG(double value)
{
auto val = getValue(value);
double f(0.0), g(0.0);
// calculate f and g which depend on val (and value)
return {f,g};
}
If I want both values:
double value(5.3);
auto [f,g] = calculateFG(value); // since C++17
// do things with f and g
If I want only 1 value, say f
, I just don't use g
and it will be optimized out. So, the performance of calculateFG
is exactly the same as calculateF
if I don't use g
. Furthermore, if I need both f
and g
, I only need to call getValue
once instead of twice.
The code is cleaner (only 1 function calculateFG
instead of calculateF
and calculateG
), and faster if both f
and g
are required. But is relying on the compiler optimization a wise choice?