引用 (reference)#

引用一个对象, 即创建已有对象的一个别名: 它只是一个别名而非新的对象.

1int value;
2int& ref = value;
3
4ref = 3;  // 通过引用访问对象, 使得 value = 3

交叉内容#

引用与初始化、赋值#

引用在声明时必须确定引用的对象, 因而必须被初始化, 往后对它的所有操作都是对其引用的对象进行:

1int& a;  // 错误: 未初始化引用
2
3int value{0};
4int& reference{value};  // 必须在这里初始化它
5reference = 3;          // 相当于 value = 3

引用与 const#

由于引用不是对象, const 不能作用于它.

1int value;
2int const& ref1 = value;  // const 向左作用于 int; 引用的 int 对象不可改变
3int& const ref2;          // 错误: 引用本身不是对象, 不能用 const 限定它

引用与值类别#

T& 只能引用左值即 "已经存在的对象", 因此不进行会产生临时对象的隐式类型转换.

1int value      = 0;
2int& reference = value;

T const& 既能引用左值又能引用右值.

既然能引用右值即临时值, 则允许在引用时发生隐式类型转换; 但这将会引用转换产生的临时对象而不是原本的对象.

1double value         = 0;
2int const& reference = value;  // 正确: T const& 能够引用临时对象
3
4value = 1;
5std::cout << reference;  // 输出 0

相关解答#