C++引用(上)

  1. 引用概念:引用不是新定义一个变量,而是给存在的变量其别名,与其引用的变量(引用实体)共用同一块内存空间
  2. 类型& 引用变量名=引用实体
#include <iostream>
using namespace std;
int main()
{
int a=10;
int& ra=a;//定义引用类型
ra=20;//因为ra和a共用同一块内存空间,因此ra改变,a也会发生改变
printf("a=%d\n",a);//20
printf("ra=%d\n",ra);//20
return 0;
}
  1. 引用特性
    (1)引用类型必须与实体是同种类型
    (2)引用类型变量在定义时必须初始化
    (3)一个变量(实体)可以有多个引用
    (4)引用一旦引用了一个实体之后,再不能引用其他的实体了
#include <iostream>
using namespace std;
int main()
{
int a=10;
int& ra=a;
double& rra=a;//会报错,类型不同,不会发生隐式转换,引用类型与实体必须是同一个类型
int& ra1;//不知道该引用谁,编译失败,因此必须定义时初始化
int& ra2=a;//一个变量可以有多个引用,相当于一个人可以有很多个别名
int& ra3=a;
printf("a=%d\n",a);//10
printf("ra=%d\n",ra);//10
printf("ra=%d\n",ra2);//10
printf("ra=%d\n",ra2);//10
return 0;
}
  1. 引用和引用的实体的生命周期是一样的吗?
    在同一个作用域中,两个生命周期相同,但在不同的作用域,实体的生命周期更长。
#include <iostream>
using namespace std;
int main()
{
int a=10;
int& ra=a;
if(a!=0)
{
int &ra1=a;
ra1=100;
}
ra1=1;//会报错,ra1的作用域在if范围内,出了if就失效了 此时a的生命周期更长
return 0;
}
  1. 常引用
    const修饰的引用称为常引用,其内容不能被修改
#include <iostream>
using namespace std;
int main()
{
//1.当a是一个常量,不能被修改时
const int a=10;
//此时如果我们直接引用它
//int& ra=a;//会报错,编译失败
//解决方法:
const int& ra=a;
cout<<ra<<endl;
cout<<a<<endl;

//2.当我们想直接引用一个常量时
//int& b=10;//编译失败,10为常量不能被修改
//解决方法:
const int& b=10;

//3.通过修改实体来修改引用
int d=4;
const int& rd=d;
d=9;
cout<<rd<<endl;//9 此时rd就是d的引用

//4.特殊情况
double c=7.17;
//int& rc=c;//编译报错
//解决方法:
const int& rc=c;
c=6.4;
cout<<rc<<endl;//7 
cout<<c<<endl;//6.4
cout<<&rc<<endl;
cout<<&c<<endl;
//此时发现rc和c的地址不同,则rc不是c的引用,编译器创建了临时空间
//用户不知道临时空间的名字以及地址,即该块临时空间中内容无法修改,则认为临时空间就具有常性
//rc实际引用的是一个常量,普通类型不能引用常量,必须在rc引用名之前加const
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值