c++引用的本质及常量引用

引用的本质

(1)本质

本质:引用的本质在c++内部实现是一个指针常量(引用是一个指针常量),指针常量指的是(int* const p = &a;)指针的指向不可以更改,但指针指向的地址内部存放的值可以更改。

(2)示例代码


void func(int& ref){
	ref = 100;
}
int main(){
	int a = 10;

	//c++内部自动转换为int* const ref = &a;
	//这一点也说明引用不能更改(指针常量的指向不能更改)
	int &ref = a;
	ref = 20; //内部发现ref是引用,自动转换为*ref = 20;
	cout << "a= " << a << endl; //结果是20
	cout << "ref= " << ref << endl; //结果是20
	fuc(a);
	return 0;
}

(3)结论

c++推荐使用引用技术,因为语法方便,引用本质是指针常量,里边繁琐的指针操作编译器都帮我们做了。

常量引用

(1)作用:

常量引用主要用来修饰形参,防止误操作。
在函数列表中,可以加const修饰形参,防止形参改变实参。

(2)示例代码

int a = 10;
int &b = a; //正确
int &b = 10; //不正确,引用必须引一块合法的内存空间(堆区或栈区),而不是一个常量(全局区 常量区)
const int& ref = 10; //正确 加上const之后,编译器将代码修改为int temp = 10;const int& b = temp;
ref = 1000; //编译器报错,因为const不可修改
//打印数据函数
void showValue(int& val){
	val = 1000; 
	cout << "val= " << val << endl;
}
int main(){
	int a = 100;
	showValue(a); //输出1000,showValue函数创建一个引用接收变量a,然后再函数内部修改了变量a的值,所以在a的值被改变。
	cout << "val= " << val << endl; //输出也是1000
	return 0;
}

上述代码中showValue作用仅为打印,修改main函数中value的值并非本意,因此可用修饰形参,防止出现上述在打印函数中修改参数值的误操作。修改后的代码如下:

//打印数据函数
void showValue(const int& val){
	//val = 1000; 加了const之后,这里会报错
	cout << "val= " << val << endl;
}
int main(){
	int a = 100;
	showValue(a); 
	cout << "val= " << val << endl; 
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值