本文共 819 字,大约阅读时间需要 2 分钟。
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..."<
(3) 总结
1. const int & e相当于 const int * const e。
2. 普通引用 int & a相当于 int * const a, 即常指针。
3. 当使用常量(字面量)对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段空间的别名。
4. 使用字面量对const引用初始化,将生成一个只读变量。
转载地址:http://zhzmi.baihongyu.com/