学习笔记内容来自:狄泰软件学院 唐佐林老师 的视频,十分感谢您的指导
1.引用是一个变量的别名,即是一段内存空间的代号
2.如果要使一个已经存在的非只读变量拥有只读属性,只需要定义一个新的const变量做为它的引用,则该新的变量为只读的
3.当使用字面常量对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段内存空间的别名,即该const引用会用该段内存,取值的时候不会去符号表拿而是去该段内存拿
4.当用一个引用对另一个引用初始化时,新的引用跟另一个引用所代表的是同一段内存空间的别名,取地址时结果相同
示例程序:
(1)
int a = 0;
const int& b = a;
int* p = (int*)&b;
b = 5;//Error,b是只读变量
*p = 5;//Ok,修改变量a的值
(2)
const int& b = 1;
int* p = (int*)&b;
b = 5;//Error,只读变量
*p = 5;//Ok,修改变量b所对应的内存空间的值
引用有没有自己的内存空间呢?(有)
示例程序:
(1)
#include <stdio.h>
struct TRef
{
char& r;
};
int main()
{
char c = 'c';
char& rc = c;
TRef ref = {c};
printf("sizeof(char&) = %d\n",sizeof(char&)); //1
printf("sizeof(rc) = %d\n",sizeof(rc)); //1
printf("sizeof(TRef) = %d\n",sizeof(TRef)); //4
printf("sizeof(ref.r) = %d\n",sizeof(ref.r)); //1
return 0;
}
引用的本质:指针,所以第三个打印的是4(因为它还没有初始化为是谁的引用,所以打印出来的是指针的大小)
引用在C++中的内部实现是一个指针常量
Type& name; -> Type* const name;