Spec-Zone.ru › Eigen3

Передача объектов 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API