1. c++ primer中有一条规定: 引用所绑定的类型和所引用的对象类型需严格匹配。除了两个例外(下面再说),我们先看看普通的引用情况:
① int i = 3;
int &ri = i; //正确,引用绑定到int 变量i上
② double d = 3.1415;
int &rd = d; //错误, 引用类型为 int ,所绑定对象类型为 double,类型不一致
③ int & rm = 3; //错误, 普通引用必须绑定到对象,不能绑定至常量
2. const引用,属于1中所说的一种例外,初始化 const引用时允许用任意表达式,只要该表达式的结果能转换为 引用类型即可。
也就是说,允许为一个const引用 绑定 非常量对象、字面值、甚至是一般表达式。
① const int &ci = 3; //正确,整型字面值常量绑定到 const引用
② int i = 1;
const int &cj = i; //正确,非常量对象绑定到 const引用
③ const int i = 4;
const int &ck = i; //正确,常量对象绑定到 const引用
④ const int i = 5;
int &r = i; //错误,常量对象绑定到非const引用