Оператор return
в функции f
создает std::pair
, что больше не копируется из-за RVO, даже если вы пишете:
auto ab_pair = f(...);
Но все же a
и b
должны быть перемещены или скопированы, но есть способ создать эту пару на месте, используя std::piecewise_construct
, а затем вернуть ее по ссылке с помощью RVO:
auto f(...){
std::pair<Eigen::ArrayXXd, Eigen::VectorXd> result{
std::piecewise_construct,
std::make_tuple(N,M),
std::make_tuple(M),
};
...
return result;
}