aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/PassingByValue.dox
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2013-01-06 23:57:54 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2013-01-06 23:57:54 +0100
commit2abe7d8c6e11a02fc345f6ae464b4b759b092a67 (patch)
tree32b0a1517731ee705e1d6ee7d8d944740642efbf /doc/PassingByValue.dox
parent091a49cad5d3aed47de9cb78c821c5f11b85e5f8 (diff)
Rename the dox files: the number prefixes are not needed anymore
Diffstat (limited to 'doc/PassingByValue.dox')
-rw-r--r--doc/PassingByValue.dox40
1 files changed, 40 insertions, 0 deletions
diff --git a/doc/PassingByValue.dox b/doc/PassingByValue.dox
new file mode 100644
index 000000000..bf4d0ef4b
--- /dev/null
+++ b/doc/PassingByValue.dox
@@ -0,0 +1,40 @@
+namespace Eigen {
+
+/** \eigenManualPage TopicPassingByValue Passing Eigen objects by value to functions
+
+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.
+
+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.
+
+So for example, a function like this, where v is passed by value:
+
+\code
+void my_function(Eigen::Vector2d v);
+\endcode
+
+needs to be rewritten as follows, passing v by reference:
+
+\code
+void my_function(const Eigen::Vector2d& v);
+\endcode
+
+Likewise if you have a class having a Eigen object as member:
+
+\code
+struct Foo
+{
+ Eigen::Vector2d v;
+};
+void my_function(Foo v);
+\endcode
+
+This function also needs to be rewritten like this:
+\code
+void my_function(const Foo& v);
+\endcode
+
+Note that on the other hand, there is no problem with functions that return objects by value.
+
+*/
+
+}