title: c++ function: pass non const argument to const reference parameter
body: <p>suppose I have a function which accept const reference argument pass,</p>
  
  <pre><code>int func(const int &amp;i)
  {
    /*    */
  }
  
  int main()
  {
    int j = 1;
    func(j); // pass non const argument to const reference
    j=2; // reassign j
  }
  </code></pre>
  
  <p>this code works fine.according to C++ primer, what this argument passing to this function is like follows,</p>
  
  <pre><code>int j=1;
  const int &amp;i = j;
  </code></pre>
  
  <p>in which i is a synonym(alias) of j, </p>
  
  <p>my question is: if i is a synonym of j, and i is defined as const, is the code: </p>
  
  <p>const int &amp;i = j</p>
  
  <p>redelcare a non const variable to const variable? why this expression is legal in c++?</p>