|
与指针相似的是,引用将存储位于内存中其他位置的对象的地址。 与指针不同的是,初始化之后的引用无法引用不同的对象或设置为 null。 有两种引用:引用命名变量的 lvalue 引用和引用临时对象的 rvalue 引用。 & 运算符表示 lvalue 引用,&& 运算符表示 rvalue 引用或通用引用(rvalue 或 lvalue),具体取决于上下文。
可以通过以下语法声明引用:
[storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier] declarator [=expression];
可以使用指定引用的任何有效声明符。 除非引用是对函数或数组类型的引用,否则应用以下简化语法:
[存储类说明符] [cv 限定符] 类型说明符 [& 或 &&] [cv 限定符] 标识符 [表达式];=
使用以下序列声明引用:
声明说明符:
可选存储类说明符。
可选 const 和/或 volatile 限定符。
类型说明符:类型的名称。
声明符:
可选的 Microsoft 专用修饰符。 有关详细信息,请参阅 Microsoft 专用修饰符。
& 运算符或 && 运算符。
可选 const 和/或 volatile 限定符。
标识符。
可选初始值设定项。
指向数组和函数的指针的更复杂的声明符形式也适用于对数组和函数的引用。 有关详细信息,请参阅指针。
多个声明符和初始值设定项可能出现在一个声明说明符后面的逗号分隔的列表中。 例如:
C++
复制
int &i;
int &i, &j;
引用、指针和对象可以一起声明:
C++
复制
int &ref, *ptr, k;
引用保留对象的地址,但语法行为与对象一样。
在下面的程序中,请注意对象的名称 s 和对象的引用 SRef 可在程序中以相同的方式使用:
// references.cpp
#include <stdio.h>
struct S {
short i;
};
int main() {
S s; // Declare the object.
S& SRef = s; // Declare and initialize the reference.
s.i = 3;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
SRef.i = 4;
printf_s("%d\n", s.i);
printf_s("%d\n", SRef.i);
}
Output
3
3
4
4
|
|