My Note about the difference between const ref and non-const ref
(1)A non-const reference may be attached only to an object of the same type as the reference itself.
(2)A const reference may be bound to an object of a different type but the change of that object will not change the reference.
(3)A const reference can be bound to a variable of the same type, but you can not directly change the value of the const reference. However, any change of the variable will be reflected in the const reference.
Below is my test code and results:
#include <stdio.h> 
#include <conio.h>
#include <iostream>

void main() 

      double dval = 3.14;
      const int &ri = dval;
      const double &rd = dval;
      dval = 4;
    std::cout<< "dval= " << dval <<std::endl;//= 4
    std::cout<< "ri= " << ri <<std::endl; // =3
    std::cout<< "rd= " << rd <<std::endl; // =4

Please give your comments. Thanks!