c++入门(2)

上期我们说到了部分c++修补C语言的不足,今天我们将剩下的一一说清楚。

函数重载

(1).函数重载的形式

C语言不允许函数名相同的同时存在,但是C++允许同名函数存在,但是有要求:函数名相同,参数不同,构成函数重载。

那么有哪几种参数不同的情况可以呢?

(2).函数重载编译器如何区分

当我们着手一些大的项目时,就会存在声明和定义分离的情况,那么这个时后编译器还能区分吗?

答案是可以的,这个时候就需要函数名修饰规则 登场了。(注意:函数名修饰规则每个编译器都不一样,不需要知道内容,只需要知道有这个规则可以区分函数。)

引用(重点)

引用并不是定义新变量,而是给一个变量取别名 。如图所示,会发现他们指向同一块地址。

(1).引用的使用场景

①引用做参数

当我们希望形参的改变影响实参,就可以传引用。例子:Swap交换函数,曾经我们书写还需要穿他的地址,解引用...但是我们现在直接传引用即可。

cpp 复制代码
void Swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int x = 10;
	int y = 20;
	Swap(x, y);
	cout << x << endl;
	cout << y << endl;
	return 0;
}

②引用做返回值

cpp 复制代码
int& func()
{
	int a = 20;
	return a;
}
int main()
{
	int& ret = func();
	return 0;
}

上述代码有错吗?有什么错?

答案:有错,a是局部变量,当函数结束,a的生命周期结束了,这个时候引用返回的是a本身而不是a的值,就会存在野引用。所以引用不能用于返回临时变量和局部变量
可以用引用返回的:全局,静态,堆变量。

(2).引用的特性

(3).引用和指针的区别

内联函数

有些比较短的函数,我们需要多次频繁的去调动,但是不断创建栈帧就会浪费空间,那么C语言是怎么做的呢?宏函数,但是宏函数存在很多的缺陷,所以C++就出现了内联函数
内联函数(inline):调用地方展开,不会建立栈帧

auto自动识别类型

(1).使用场景

①自动识别复杂类型

我们在学习C语言的时候,有函数指针和数组指针等等复杂类型,那么这个时候就可以用auto来自动识别。

②范围for

范围for只能用在数组和其他数据结构中!

空指针nullptr

在c中NULL表示空指针,但是在c++中出现了一个问题。发现了NULL和0没区别。从此以后初始化空指针用:nullptr

以上就是所有入门小知识,恭喜大家,迈进了c++大门~!希望大家永远保持热情勇敢走下去!

相关推荐
yaoxin5211235 分钟前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
java·开发语言·python
WBluuue15 分钟前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
NotFound48632 分钟前
实战指南如何实现Java Web 拦截机制:Filter 与 Interceptor 深度分享
java·开发语言·前端
木子墨51636 分钟前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
Ava的硅谷新视界1 小时前
用了一天 Claude Opus 4.7,聊几点真实感受
开发语言·后端·编程
rabbit_pro1 小时前
Python调用onnx模型
开发语言·python
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
一 乐2 小时前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
weixin_513449962 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
浪客川2 小时前
【百例RUST - 010】字符串
开发语言·后端·rust