前面说的是普通引用,普通引用相当于 int * const var 。
何为常引用? 举个栗子: int you = 18; const int & me = you; 常引用是让变量引用只读属性,不能通过me去修改you。
# include "iostream"
using namespace std;
void main()
{
{ //普通引用
int a = 10;
int & b = a; // int * const b = &a
//常引用
int x = 20;
const int & y = x;
//y = 40;// × 常引用让变量具有只读属性,不能通过y修改x
}
{
//常引用初始化分两种情况
//1:用变量初始化常引用
int c = 666;
const int & d = c;
//2:用字面量初始化常引用
const int you = 18; //编译器把a放在符号表中。
//int & m = 41; // 报错。普通引用引用一个字面量,字面量没有内存地址。
//printf("&40:%d\n",&40); //引用就是给内存取多个门牌号(多个别名)
const int & me = 20; //√
//以下两句证明了20没有地址,但是c++编译器会给m分配内存空间/
//printf("&20:%d\n",&20);
//printf("&m:%d\n",&m);
}
}
struct you
{
char name[64];
int age;
};
void printyou(const you & y) //C++编译器内部→ const you * const y ,变量本身和指向的内存空间都不能被修改
{
//y.age = 28; //× 常引用让变量只有可读属性
printf("y.age:%d\n",y.age);
}
void main()
{
you y1 ;
y1.age = 18;
printyou(y1);
system("pause");
}
普通引用相当于 int * const var,常引用相当于 const int * const var .