Вы можете вернуться, передав неконстантную ссылку для предварительного выделения вне функции-члена.
Class C {
double alpha = 0.1;
void f(std::valarray<double> const & arr, std::valarray<double>& result) //called many times in a loop
{
result = arr * alpha;
}
}
Затем вызывающему абоненту необходимо создать собственную предварительно выделенную переменную результата, но затем он может повторно использовать эту переменную во время повторных вызовов f .
std::valarray<double> f_retval = std::valarray<double>(Nx);
while (/*some condition*/) {
myC.f(toModify, f_retval);
// do something with f_retval
}
Преимущества этого решения по сравнению с предложенным вами решением включают:
- возврат по ссылке более очевиден для пользователя функции-члена
- функциональность функции-члена более ограничена (для ее выполнения не требуется два метода), что также позволяет избежать ошибок, вызванных неправильным использованием
- сам класс менее сложен
Единственный потенциальный недостаток, который я вижу при возврате по ссылке, заключается в том, что для вызова этого метода требуется дополнительное объявление переменной.