Передача объектов Eigen по значению функциям
Передача объектов по значению почти всегда очень плохая идея в C++, так как это означает бесполезные копии, и вместо этого следует передавать их по ссылке.
С Eigen это еще более важно: передача объектов Eigen фиксированного размера с возможностью векторизации по значению не только неэффективна, она может быть незаконной или привести к сбою вашей программы! Причина в том, что эти объекты Eigen имеют модификаторы выравнивания, которые не соблюдаются при передаче по значению.
Например, функция такого вида, где v передается по значению:
void my_function(Eigen::Vector2d v);
нужно переписать следующим образом, передавая v по константной ссылке:
void my_function(const Eigen::Vector2d& v);
Аналогично, если у вас есть класс, имеющий объект Eigen в качестве члена:
struct Foo { Eigen::Vector2d v; }; void my_function(Foo v);
Эта функция также должна быть переписана так:
void my_function(const Foo& v);
Обратите внимание, что, с другой стороны, нет проблем с функциями, возвращающими объекты по значению.
© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/group__TopicPassingByValue.html