<分区>
问题:在编码时依赖编译器优化是否可以?
假设我需要计算 calculateF
和 calcuateG
,它们都取决于 getValue
返回的另一个值。有时我需要这两个值,有时我只需要其中一个值。
// 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;
}
现在,我可以更优雅地写这个:
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};
}
如果我想要两个值:
double value(5.3);
auto [f,g] = calculateFG(value); // since C++17
// do things with f and g
如果我只想要 1 个值,比如 f
,我只是不使用 g
,它将被优化掉。因此,如果我不使用 g
,calculateFG
的性能与 calculateF
完全相同。此外,如果我同时需要 f
和 g
,我只需要调用一次 getValue
而不是两次。
代码更简洁(只有 1 个函数 calculateFG
而不是 calculateF
和 calculateG
),如果同时使用 f
则速度更快code> 和 g
是必需的。但是依靠编译器优化是一个明智的选择吗?