title: Correct usage of the Eigen::Ref<> class
body: <p>Eigen has introduced the Ref&lt;> class to write functions with Eigen objects as parameters without the use unnecessary temporaries, when writing template functions is not wanted. One can read about this <a href="http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html#TopicUsingRefClass" rel="noreferrer">here</a>.</p>
  
  <p>When searching the internet further, I found several different declarations of parameters using the Ref&lt;> class. In the Eigen documentation they use <code>const Eigen::Ref&lt;const Eigen::MatrixXf&gt;&amp;</code> for a read-only parameter in the first example. In the second example <code>Eigen::Ref&lt;Eigen::MatrixXd&gt;</code> is introduced for read-and-write parameters, BUT here <code>const Eigen::Ref&lt;const Eigen::MatrixXd&gt;</code> is used for read-only parameters (no reference). So my question is:</p>
  
  <p>What is the difference between the following declarations and when do I use which?`</p>
  
  <ol>
  <li><code>const Eigen::Ref&lt;const Eigen::MatrixXd&gt;&amp;</code></li>
  <li><code>const Eigen::Ref&lt;const Eigen::MatrixXd&gt;</code></li>
  <li><code>const Eigen::Ref&lt;Eigen::MatrixXd&gt;&amp;</code></li>
  <li><code>const Eigen::Ref&lt;Eigen::MatrixXd&gt;</code></li>
  <li><code>Eigen::Ref&lt;const Eigen::MatrixXd&gt;&amp;</code></li>
  <li><code>Eigen::Ref&lt;const Eigen::MatrixXd&gt;</code></li>
  <li><code>Eigen::Ref&lt;Eigen::MatrixXd&gt;&amp;</code></li>
  <li><code>Eigen::Ref&lt;Eigen::MatrixXd&gt;</code></li>
  </ol>
  
  <p>For completeness I listed every possible combination of const usage and the reference.</p>