const 引用是指向 const 对象的引用:
const int ival = 1024; const int &refVal = ival; // ok: both reference and object are const int &ref2 = ival; // error: non const reference to a const object
可以读取但不能修改 refVal ,因此,任何对 refVal 的赋值都是不合法的。这个限制有其意义:不能直接对 ival 赋值,因此不能通过使用 refVal 来修改 ival。
同理,用 ival 初始化 ref2 也是不合法的:ref2 是普通的非 const 引用,因此可以用来修改 ref2 指向的对象的值。通过 ref2 对 ival 赋值会导致修改 const 对象的值。为阻止这样的修改,需要规定将普通的引用绑定到 const 对象是不合法的。
const 引用可以初始化为不同类型的对象或者初始化为右值(第 2.3.1 节),如字面值常量:
int i = 42; // legal for const references only const int &r = 42; const int &r2 = r + i;
总结:const引用可以用于连接const和非const对象,非const引用只能连接非const对象。也表明了权限只能越来越严格,不能越来越松。