C++入门(下)

本文介绍了C++中的引用、内联函数、auto关键字、范围for循环和空值指针nullptr。引用是变量的别名,与指针相似但更安全,常用于函数参数和返回值。内联函数可提高效率,避免函数调用开销,但不适合复杂函数。C++11引入的auto简化类型声明,范围for循环提供简洁的遍历方式,nullptr是安全的空指针常量。
摘要由CSDN通过智能技术生成

一、引用

1、概念

  引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。这就像小时候家里给起的小名,例如:小明,这与大名指的是同一个实体,共用一个空间。

类型& 引用变量名(对象名) = 引用实体;

void TestRef()
{
   
   int a = 10;
   int& ra = a;//<====定义引用类型
   printf("%p\n", &a);
   printf("%p\n", &ra);
}

注意:引用类型必须和引用实体是同种类型

2、特性

  • 引用在定义时必须初始化。
  • 一个变量可以有多个引用。
  • 引用一旦引用一个实体,就不能引用其他实体。
void TestRef()
{
   
  int a = 10;
// int& ra; //没有初始化,所以编译器会报错
  int& ra = a;
  int& rra = a;//与ra引用的是同一个实体
  printf("%p %p %p\n", &a, &ra, &rra); 
}

3、常引用

目的:不想通过引用来改变原来空间的值
形式: const int &c = a //相当于 const int * const c = &a

常引用初始化有两种情况:

  • 用变量 初始化常引用
   int e = 30;         
   const int &f = e;//用e变量去初始化 常引用
  • 用字面量 去初始化 常量引用,不能用常量给引用赋值
  const int g = 40;
  //int &rg=g; 报错哦!
  const & rg=g;可以哦!
  //int &m = 41;//普通引用 引用一个字面量  字面量中没有内存地址  不可以哦      
  const int &m = 43;//c++编译器会分配内存空间 给&m     
  cout <<"m="<<m << endl;  //输出为43   
   

在这里插入图片描述

4、使用场景

  • 做函数的参数
void Swap(int& left, int& right) 
{
   
   int temp = left;
   left = right;
   right = temp; 
}
  • 做函数的返回值
int& TestRefReturn(int& a) 
{
    
   a += 10;
   return a; 
}

  如果函数返回时,离开函数作用域后,其栈上空间已经还给系统,因此不能用栈上的空间作为引用类型返回。如果以引用类型返回,返回值的生命周期必须不受函数的限制(即比函数生命周期长)。像下面这个例子就会出问题:

int& Add(int a, int b) 
{
   
   int c = a + b;
   return c;
}
int main()
{
   
   int& ret = Add(1, 2);//用的栈上的空间进行返回,函数结束时就会返还栈上的空间。
   Add(3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值