1 常引用初始化的情况:
(1) 用变量进行初始化,代码如下
//常引用
int x = 20;
const int &y = x; //常引用是让变量引用只具有只读属性,不能通过y去修改x了
(2) 用常量进行初始化,代码如下:
int &m = 41;
上面这句话在c++编译器中是会报错的,因为引用是变量(内存)的别名,即其是指向一个内存地址空间的,而41是一个字面量,没有地址空间,所以报错。而下面的代码,可以编译通过:
const int &m = 43; //c++编译器会为m分配内存空间 ,然后让这个引用的指针指向这个m的内存空间,所以这句话会编译通过
这是因为用了const修饰,c++首先会为字面量分配内存空间,然后将引用作为这段内存空间的别名
(2) 特殊类型做引用,代码如下:
struct Teacher
{
char name[64];
int age ;
};
//void printTeacher(const Teacher * const myt)
void printTeacher(const Teacher &myt)
{
//常引用 让 实参变量 拥有只读属性
//myt.age = 33; //这句话会编译不通过
printf("myt.age:%d \n", myt.age);
}
void main()
{
Teacher t1;
t1.age = 36;
printTeacher(t1);
cout<<"hello..."<<endl;
system("pause");
return ;
}
(3) 总结
1. const int & e相当于 const int * const e。
2. 普通引用 int & a相当于 int * const a, 即常指针。
3. 当使用常量(字面量)对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段空间的别名。
4. 使用字面量对const引用初始化,将生成一个只读变量。