QT及C++中引用的用法和意义

本文详细介绍了C++中的引用概念,包括其本质、作为函数参数和返回值的应用,以及与指针的区别。特别强调了引用的易用性与底层实现,以及引用不能绑定到临时数据的特点。
摘要由CSDN通过智能技术生成

.引用概述

1.引用的含义

引用(Reference)是 C++ 相对于C语言的又一个扩充。

引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。

2.引用的本质

其本质只是对指针进行了简单的封装,它的底层依然是通过指针实现的。

在 C++ 中引入引用的直接目的是为了让代码的书写更加漂亮,尤其是在运算符重载中,不借助引用有时候会使得运算符的使用很麻烦。

二.引用的示例

1.下面是一个演示引用的实例:

int main() {

    int a = 99;

    int &r = a; //第6行

    qDebug() << a << ", " << r ;

qDebug() << &a << ", " << &r ;

    return 0;

}

打印结果:

99 ,  99

0x4e6d7ffc30 ,  0x4e6d7ffc30

2.引用作为函数参数

//直接传递参数内容

void swap1(int a, int b) {

    int temp = a;

    a = b;

    b = temp;

}

//传递指针

void swap2(int *p1, int *p2) {

    int temp = *p1;

    *p1 = *p2;

    *p2 = temp;

}

//按引用传参

void swap3(int &r1, int &r2) {

    int temp = r1;

    r1 = r2;

    r2 = temp;

}

//测试应用:

//直接传递参数内容

swap1(100, 200);

qDebug << num1 << " " << num2 ;

返回:

100 200

//传递指针

swap2(100, 200);

qDebug << num1 << " " << num2 ;

返回:

200 100

//按引用传参

swap3(100, 200);

qDebug << num1 << " " << num2 ;

返回:

200 100

3.引用可以作为函数返回值

int &plus10(int &r) {

    r += 10;

    return r;

}

int main() {

    int num1 = 10;

    int num2 = plus10(num1);

    qDebug()<< num1 << "  " << num2 ;

    return 0;

}

运行结果是输出“20   20”

四、引用的本质

这里先给出结论:引用只是对指针进行了简单的封装,它的底层依然是通过指针实现的。

1.引用虽然是基于指针实现的,但它比指针更加易用,从上面的两个例子也可以看出来,通过指针获取数据时需要加*,书写麻烦,而引用不需要,它和普通变量的使用方式一样。

C++ 的发明人 Bjarne Stroustrup 也说过,他在 C++ 中引入引用的直接目的是为了让代码的书写更加漂亮,尤其是在运算符重载中,不借助引用有时候会使得运算符的使用很麻烦。

2.简单总结就是:

下次你遇到一个引用 int &r = num,由于编译器的内部转换,输出&r 的效果等同于输出 &num。

或者由于编译器的内部转换,可以把引用 r 彻底等同于 num,因此 &r 等同于 &num。

五、引用和指针的区别

1、引用必须在定义时初始化,并且以后也要从一而终,不能再指向其他数据;指针没有这个限制,指针在定义时不必赋值,以后也能指向任意数据。

2、有const指针但没有const引用,因为 r 本来就不能改变指向,加上const是多此一举。

六、引用不能绑定到临时数据

指针就是数据或代码在内存中的地址,指针变量指向的就是内存中的数据或代码。这里有一个关键词需要强调,就是内存,指针只能指向内存,不能指向寄存器或者硬盘,因为寄存器和硬盘没法寻址。

其实 C++ 代码中的大部分内容都是放在内存中的,例如定义的变量、创建的对象、字符串常量、函数形参、函数体本身、new或malloc()分配的内存等,这些内容都可以用&来获取地址,进而用指针指向它们。

除此之外,还有一些我们平时不太留意的临时数据,例如表达式的结果、函数的返回值等,它们可能会放在内存中,也可能会放在寄存器中。一旦它们被放到了寄存器中,就没法用&获取它们的地址了,也就没法用指针指向它们了。

1.下面的代码演示了表达式所产生的临时结果:

int n = 100, m = 200;

int *p1 = &(m + n);    //m + n 的结果为 300

int *p2 = &(n + 100);  //n + 100 的结果为 200

bool *p4 = &(m < n);   //m < n 的结果为 false

这些表达式的结果都会被放到寄存器中,尝试用&获取它们的地址都是错误的。

2.下面的代码演示了函数返回值所产生的临时结果:

int func(){

    int n = 100;

    return n;

}

int *p = &(func());

func() 的返回值 100 也会被放到寄存器中,也没法用&获取它的地址。

QtC++技术PDF指的是以Qt框架为基础,使用C++编程语言开发的技术相关的PDF文档。Qt是一套跨平台的应用程序开发框架,提供了丰富的图形界面和应用程序组件,能够快速开发出高质量的桌面和移动应用程序。 Qt框架使用C++编程语言作为开发语言,因此在学习和使用Qt时,对C++的基础知识和技能有很大的依赖。C++是一门功能强大且广泛应用于现代软件开发的编程语言,掌握好C++语言的特性和技巧对于使用Qt进行开发是至关重要的。 QtC++技术PDF可能包含了以下内容: 1. Qt框架常用的C++语法和特性,如类和对象、继承和多态、指针和引用等。这些内容帮助开发者更好地理解和使用Qt框架。 2. Qt的信号和槽机制,这是Qt框架用于实现对象之间通信的重要机制。了解信号和槽的原理和使用方法能够帮助开发者正确地设计和实现应用程序。 3. Qt的常用工具和类库,如Qt Widgets、Qt Quick等。这些工具和类库为开发者提供了丰富的界面组件和功能模块,通过学习和使用这些工具和类库,开发者可以快速构建出功能完善的应用程序。 4. Qt的高级主题和技术,如Qt网络编程、数据库操作、多线程和并发编程等。这些内容涉及到了Qt框架的更高级别的应用和技术,对于需要进行复杂应用开发开发者非常重要。 总之,QtC++技术PDF对于学习和掌握Qt框架以及C++语言有着重要的作用,能够帮助开发者快速上手并开发出高质量的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI+程序员在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值