Home | History | Annotate | Download | only in doc
      1 namespace Eigen {
      2 
      3 /** \page TopicPassingByValue Passing Eigen objects by value to functions
      4 
      5 Passing objects by value is almost always a very bad idea in C++, as this means useless copies, and one should pass them by reference instead.
      6 
      7 With Eigen, this is even more important: passing \ref TopicFixedSizeVectorizable "fixed-size vectorizable Eigen objects" by value is not only inefficient, it can be illegal or make your program crash! And the reason is that these Eigen objects have alignment modifiers that aren't respected when they are passed by value.
      8 
      9 So for example, a function like this, where v is passed by value:
     10 
     11 \code
     12 void my_function(Eigen::Vector2d v);
     13 \endcode
     14 
     15 needs to be rewritten as follows, passing v by reference:
     16 
     17 \code
     18 void my_function(const Eigen::Vector2d& v);
     19 \endcode
     20 
     21 Likewise if you have a class having a Eigen object as member:
     22 
     23 \code
     24 struct Foo
     25 {
     26   Eigen::Vector2d v;
     27 };
     28 void my_function(Foo v);
     29 \endcode
     30 
     31 This function also needs to be rewritten like this:
     32 \code
     33 void my_function(const Foo& v);
     34 \endcode
     35 
     36 Note that on the other hand, there is no problem with functions that return objects by value.
     37 
     38 */
     39 
     40 }
     41