今天才发现,“常量引用”是真的特殊。
对于一般的引用而言,需要要求引用的类型与引用对象的类型一致,如:
int i = 3;
int &r1 = i;//合法
double &r2 = i;//非法
类型一致,是一般引用的一个标准。
但是,对于“常量引用”(对const的引用)却可以不遵从这种方式。
在初始化常量引用时,允许用任意表达式作为初始值(只要改表达式的结果可以转化为该引用的类型即可),包括非常量的对象、字面值,甚至是一般表达式。
如下:
int i = 42;
const int &r1 = i;//合法
const int &r2 = 42;//合法
const int &r3 = r1 * 2;//合法
int &r4 = r1 * 2;//非法
由上面的事例可以看出,对于“常量引用”而言,基本上各种能够转化为该引用类型的右值都是合法的;但是对于“一般引用”,必须要求引用的类型与引用对象的类型一致。
参考资料:《C++ primer》