C++关于引用的理解


在这里插入图片描述

引用的概念和定义

在C++编程语言中,引用是一种特殊的数据类型,用于给变量或对象起一个别名。(例如“鸡”的别名是”坤“)

引用的定义使用&符号,将其放在变量或对象的类型前面。例如,以下代码定义了一个整数变量a和一个整数引用b

int a = 5;
int& b = a;

在这个例子中,b是对a的引用,也可以将b视为a的别名。因此,对b的任何操作实际上都是在操作a

引用的特性

引用有以下几个特点:

  1. 必须在声明时进行初始化,一旦初始化后,就不能再引用其他变量。
  2. 引用可以用于函数参数和返回类型,允许函数直接操作原始变量而不是其副本。
  3. 引用可以使代码更简洁,更易读,尤其在涉及到大型对象时。
  4. 修改引用会直接影响到原始变量,因为它们指向同一块内存空间。

下面是一个简单的例子来演示引用的使用:

#include <iostream>

void square(int& num) {
  num = num * num;
}

int main() {
  int num = 5;
  std::cout << "Before: " << num << std::endl;

  square(num);

  std::cout << "After: " << num << std::endl;

  return 0;
}

在这里插入图片描述

这个例子中,square函数接受一个整数的引用作为参数,然后将这个参数的值平方。在main函数中,我们声明一个整数num,并将其传递给square函数。由于num是一个引用,square函数中修改num的值也会反映在main函数中。如果没有(&)则是传值操作,传入函数内部的只是num的值的一份临时拷贝,在函数结束后被销毁,因此不会改变main函数中num的值。

const引用

const引用是指使用const关键字声明的引用。常量引用不允许修改引用的值,它只能引用常量值或临时对象。使用const引用可以避免不必要的拷贝和修改引用的值

int x = 5;
const int& y = x; // 声明一个常量引用y,与x绑定
x = 10; // 修改x的值
cout << y << endl; // 输出10,常量引用y跟随x的变化
 

在函数参数传递中,使用const引用可以避免对实参的拷贝,提高程序的效率。同时,const引用还可以处理临时对象,在表达式中使用const引用可以避免临时对象的拷贝。

注意,使用const引用时,被引用的对象不能是非const对象。

int main()
{
const int a=10;
//编译报错:error c2440:“初始化”:无法从“const int”转换为“int &”
//这里的引用是对a访问权限的放大
//int& ra=a;

//这样才可以
const int& ra=a;
//编译报错:error c3892:“ra”:不能给常量赋值
//ra++;

//这里的引用是对b访问权限的缩小
int b=20;
const int& rb=b;
//编译报错:error c3892:“rb”:不能给常量赋值
//rb++;
return 0;
}

const引用是一种只读引用,它可以引用一个常量,并且通过该引用可以读取该常量的值,但不能修改该常量的值。因此,通过const引用给常量取别名可以方便地使用常量的值,而且不会对该常量的值进行修改。

const int& a=30;

指针和引用的关系

  • C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。
  • 语法概念上引⽤是⼀个变量的取别名不开空间指针是存储⼀个变量地址,要开空间
  • 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
  • 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
  • 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
  • sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)
  • 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。
    在这里插入图片描述
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值