行业知识
C++引用、内联函数、auto关键字介绍以及C++中无法使用NULL的原因
2026-10-19 12:21:17
来源:互联网转载
文章目录
- 一、引用
- 1.1 引用概念
- 1.2 引用特性
- 1.3 常引用
- 1.4 使用场景
- 1.4.1 做参数
- 1.4.2做返回值
- 1.5 引用和指针的区别
- 1.6 小结一下
- 二、内联函数
- 2.1 内联的概念
- 2.2 内联的特性
- 2.3 【面试题】
- 三、auto关键字(C++11)
- 3.1 类型别名思考
- 3.2 auto简介
- 四、auto的使用细则
- 4.1 基于范围的for循环(C++11)
- 4.2 范围for的使用条件
- 五、���针空值nullptr(C++11)
一、引用
1.1 引用概念
C++是C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用(reference)就是C++对C语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名; -->百度百科
- 这个引用就相当于是别名
void TestRef(){int a = 10;int& ra = a;//int a = 10;// int& ra; // 该条语句编译时会出错,必须要初始化int& ra = a;int& rra = a;printf("%p %p %p\n", &a, &ra, &rra);}int a = 0;// 权限的缩小const int& c = a;const int x = 10;// 权限的放大int& y = x;return 0;}int tmp = *a;*a = *b;*b = tmp;}int main(){int x = 0, y = 1;Swap(&x, &y);return 0;}int tmp = a;a = b;b = tmp;}int main(){int x = 0, y = 1;Swap(x, y);return 0;}pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250423/-25042310215G60.png" //p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250423/-25042310215Mc.png" //p ulli那么引用可以代替指针吗?【不可以!】blockquote p指针和引用的功能是类似的,有重叠的/ppC++的引用,对指针使用比较复杂的场景进行一些替换,让代码更简单易懂,但是不能完全替代指/p /blockquote ulli针引用不能完全替代指针原因:引用定义后,不能改变指向blockquote p就比如说在数据结构中学的链表,指针需要改变指向,引用不能改变指向,这就是引用不能代替指针的原因/p /blockquote ulli那java和pythone等其他语言有没有指针?–>没有 - 那他们的链表是怎么实现的呢?–>引用
- 本质上就是引用可以改变指向
- 我们再来看一个案例,在我们学数据结构的时候单链表学习阶段
- 有这这么一段代码,这里的pphead必须要传二级指针,有点不好理解呀
void PushBack(struct Node** pphead, int x){ *pphead = newnode;}int main(){struct Node* plist = NULL;return 0;}- 而我们学了引用就可以这样写了,加上一个引用,也就是phead是plist的一份临时拷贝
void PushBack(struct Node*& phead, int x){phead = newnode;}int main(){struct Node* plist = NULL;return 0;}传值、传引用效率比较
- 我们这里可以测试一下性能,对比一下传值、传引用
#include struct A { int a[10000]; };void TestFunc1(A a) {}void TestFunc2(A& a) {}void main(){A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i
- 我们这里可以测试一下性能,对比一下传值、传引用
- 而我们学了引用就可以这样写了,加上一个引用,也就是phead是plist的一份临时拷贝
- 这个引用就相当于是别名