引用概述¶
语法¶
通用语法如下:
[storage-class-specifiers] [cv-qualifiers] type-specifiers declarator [= expression];
简化语法如下:
[storage-class-specifiers] [cv-qualifiers] type-specifiers [& or &&] [cv-qualifiers] identifier [= expression];
引用声明顺序如下:
- 说明符
- 可选的存储类说明符
- 可选的
cv
限定符 - 类说明符:类名
- 声明符
&
或者&&
运算符- 可选的
cv
限定符 - 标识符
- 可选的初始化器
引用类型的声明必须包含初始化器,以下情况除外:
- 显式
extern
声明 - 类成员的声明
- 类内声明
- 函数的参数或函数的返回类型声明
示例¶
引用对象拥有对象的地址,但其操作和对象一样,可看成是对象的别名
struct S {
short i;
};
int main() {
S s; // Declare the object.
S &SRef = s; // Declare the reference.
cout << (void *) &s << endl;
cout << (void *) &SRef << endl;
// 已初始化的引用不能引用其他对象
S ss;
SRef = ss;
cout << (void *) &s << endl;
cout << (void *) &ss << endl;
cout << (void *) &SRef << endl;
}
结果:
0x7ffc568084d0
0x7ffc568084d0
0x7ffc568084d0 // s
0x7ffc568084e0 // ss
0x7ffc568084d0 // SRef