C++中的引用

这篇具有很好参考价值的文章主要介绍了C++中的引用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引用的概念

 引用不是新定义一个变量,而是给已有变量取一个别名,编译器不会为引用变量开辟内存空间,而和它引用的变量共用一块内存空间。

注意,由于C++兼容C,所以&既可以是引用符号,也可以是取地址

int a = 0;
int& b = a;

cout << &a << endl;//0000009D826FF524
cout << &b << endl;//0000009D826FF524

补充:

1.同一个变量可以有多个别名

2.可以对变量的别名再取别名

3.引用必须初始化

4.引用不能该别指向

二、引用的基本使用场景

1.做函数参数

void swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

int main()
{
	int x = 10;
	int y = 20;
	swap(x, y);//函数接收到x与y后,相当于为x与y分别取别名为a和b
	cout << "x=" << x << " " << "y=" << y << endl;
	return 0;
}

2.做函数返回值

注意:不能返回局部变量(临时变量)的引用,否则可能会出现野引用

局部变量a在func函数执行完毕后即被销毁,主函数中用引用变量ret接收变量a,因此ret为野引用

int& func()
{
	int a = 10;
	return a;
}
int main()
{
	int& ret = func();//ret即为野引用
	return 0;
}

正确做法:返回静态变量,诸如此类的非临时变量的引用

int& func()
{
	static int a = 10;
	return a;
}
int main()
{
	int& ret = func();
	return 0;
}

三、引用和指针的区别

语法方面:

1.引用是取别名,无需开空间;指针是地址,需要开空间

2.引用必须初始化;指针可以初始化,也可以不初始化

3.引用不可以改变指向;指针可以改变指向

4.引用相对较安全,没有空引用,不易出现野引用;指针容易出现空指针和野引用

5.sizeof(引用)结果是引用指变量的大小;sizeof(指针)结果是4/8字节

底层实现方面:

汇编层面上,不存在引用,引用就是使用指针实现的,引用编译后也就成了指针

引用的本质是指针常量:int& b=a   即为 int* const b=&a

四、常量引用

1.常量引用,引用变量不可修改,即a不可再修改

void func(const int& a)
{
	cout << a << endl;
}

2.普通引用只能指向变量,常量引用可以指向常量,编译器会临时创建一个变量

const int &ret=10;//正确,const修饰后,编译器会临时创建一个变量
                  //int tmp=10;
                  //int &ret=tmp; 

3.引用作为函数参数时,常量引用和普通引用是不一样的,可以构成重载函数文章来源地址https://www.toymoban.com/news/detail-823118.html

void func(int &a)
{
    cout<<"func(int &a)的调用"<<endl;
}
 
void func(const int &a)
{
    cout<<"func(const int &a)的调用"<<endl;
}
int main(int argc, char** argv) {
    int m;
    func(m);//调用func(int &a) 
    func(3);//调用func(const int &a) 
}

到了这里,关于C++中的引用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java和C++中的引用概念

    Java中的引用 在Java中,所有的对象都是通过引用来访问的。这些引用类似于C++中的指针。当你创建一个对象时,Java会在堆内存中为该对象分配空间,并返回一个指向该对象的引用。你可以使用这个引用来访问和操作对象。 例如: java Person person = new Person(\\\"John\\\"); 在这个例子中

    2024年02月05日
    浏览(31)
  • 今天,我终于学懂了C++中的引用

    本篇博客全站热榜排名:2 Hello,大家好,今天我们就来聊聊有关C++中的引用知识📖 回忆一下我们曾经在写C语言的时候因为指针所引发的种种难题,特别是对于【两数交换】的时候因为函数内部的概念不会引发外部的变化,使得我们 需要传入两个需要交换数的地址 ,在函数

    2023年04月08日
    浏览(63)
  • 【C++】C++引用 (引用不会?详细解决引用诸多细节!)

    C++引用目录: 一、引用的概念 二、引用的特性 2.1引用在定义的时候必须初始化 2.2一个变量可以有多个引用 2.3引用一旦引用了一个实体,就不可以再引用其他实体 三、常引用(带const的引用) 3.1临时变量有常性不能修改(传值返回,隐式/强制类型转换时产生) 3.2指针/引用

    2024年02月09日
    浏览(35)
  • 【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

    之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义 已存在变量 a 的引用 b ; 这里的 引用 b 就是 普通引用 ; 普通引用代码示例 : 执行结果 : 与 变量引用 相对的就是 常量引用 ; 通过 普

    2024年02月11日
    浏览(29)
  • 【C++】C++ 引用详解 ⑦ ( 指针的引用 )

    指针的引用 效果 等同于 二级指针 , 因此这里先介绍 二级指针 ; 使用 二级指针 作为参数 , 可以实现如下功能 : 动态内存管理 : 借助二级指针 , 可以在函数中分配或释放内存 ; 如 : 创建一个动态数组或调整现有数组的大小 , 在函数中需要一个指向指针的指针作为参数 , 以便修

    2024年02月11日
    浏览(29)
  • 【C++】C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 )

    \\\" 引用 \\\" 语法 是 C++ 语言中 特有的 , 在 C 语言中是没有 引用 这个概念的 ; 分析 引用 之前 , 先回顾下 变量 : 在 【C 语言】变量本质 ( 变量概念 | 变量本质 - 内存空间别名 | 变量存储位置 - 代码区 | 变量三要素 ) 博客中 , 介绍了变量的本质 : 变量 的本质是 内存空间 的 \\\" 别名

    2024年02月11日
    浏览(42)
  • C++的引用 拷贝赋值和引用赋值

        💯 博客内容:C++的引用 拷贝赋值和引用赋值 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 目录 引用  引用

    2024年02月12日
    浏览(36)
  • C++右值引用,右值引用与const引用的区别

    左值:可以取地址的、有名字的变量,有持久性; 右值:一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的。 C++11新增了另一种引用——右值引用。这种引用可指向右值,使用声明。 右值引用只能引用临时变量和常量值。 const引用:可以引用普

    2024年01月18日
    浏览(55)
  • 【C++初阶】C++入门——引用

    前言:  相信大家在学习C语言的时候,最头疼的就是指针,经常会碰到一级指针、二级指针,这些指针使用起来,稍有不慎就会等导致程序崩溃,为了让广大程序员少掉点头发,C++中提出了 引用 这一概念。当然,在C++的代码中,仍然可以兼容C语言的指针。  在语法上 引用

    2024年02月13日
    浏览(33)
  • 【C++】C++ 引用详解 ⑨ ( 常量引用初始化 | C / C++ 常量分配内存的四种情况 )

    使用 \\\" 普通变量 \\\" 初始化 \\\" 常量引用 \\\" , 就是将 普通变量 赋值给 常量应用 , 也可以理解为 将 变量转为常量 ; 下面的代码 , 就是上述 使用 普通变量 初始化 常量引用 : 在 博客 【C++】C 语言 和 C++ 语言中 const 分析 ( const 左数右指原则 | C 语言中常量的原理和缺陷

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包