C与C++的区别,类型转换,引用

news2025/2/13 8:13:01

1.从C到C++

语言的区别

C语言

编译性语言
面向过程语言

灵活
移植性好
效率高

shell

解释性语言
面向过程语言

Linux运维

C++

编译性语言
面向对象

面向对象语言效率最高的
应用领域:系统开发(APP开发,服务器开发),引擎开发,游戏开发,嵌入式开发,GUI界面开发。

python

解释性语言
面向对象

人工智能,绝大部分都是python开发的
应用领域:系统开发(APP开发,服务器开发),游戏开发,运维,爬虫,大数据,GUI界面开发,人工智能

面向过程

把需求/问题,拆解成一个个步骤

程序=数据结构+算法

面向对象

将需求/问题,抽象成多个对象

程序=对象+对象间的通信机制

2.C++与C的差异

编译一个C++程序

C++的文件后缀

有很多:.C,.cc, .cpp, .c++, …

推荐使用:.cpp

原因:通用。各种操作系统,各种IDE软件都是识别。

编译

Linux:g++

注意:理论上C语言用gcc,C++用g++。

windows:MinGW

IDE

QT

Vscode

Dev-c++

。。。

2.1更加严格的语法检查

1.更加严格的类型检查

char a = 'A';
int *q = &a;

char *p = malloc(1);

c++会直接报错

2.更加严格的函数形式

1.返回值
	如果函数不是void,那么需要返回值,否则报警告
2.形参
	如果没写,默认是void。不能传实参,否则报错

3.不允许同名的全局变量

int a;
int a;

C++会直接报错

4.可以对寄存器类型取地址

只要编译器发现你有这个操作,register变成auto

5.新增布尔(bool)类型

true--1
false--0

2.2const

C:

​ 对于C语言来说,const只修饰变量名

C++:

​ 有点类似于#define,在预处理的阶段进行替换

​ 1.绝对的常量,不能直接修改

​ 2.必须初始化

​ 3.可以间接修改,volatile(易变的)

volatile const int var = 10;	// 必须定义在其他文件
在本文件中,extern引入

和宏常量的区别:

​ 1.宏的边缘效应

​ 2.错误检查

​ 推荐各位,使用const而不是宏常量

定义及初始化

左值引用–引用普通的变量

<存储类型> <数据类型> &引用名;

int a = 10;
int &r = a;

右值引用–引用临时变量

int &&r;
移动构造。

使用

和普通变量名一样使用
r+=10;

特点

1.必须初始化,没有空引用。(空引用相当于是野指针)

2.引用在初始化后,不能引用其他空间。(只会修改内容)

3.一个变量可以被多次引用。(一个人,可以有很多外号)

4.不能直接引用地址类型(破坏了引用的使用规则)

 int * (&qqq) = p;
 *qqq = 777;
 给一个指针取别名

引用和函数

作为参数
相当于地址传递,获取的是实参的空间
和变量名一样使用
作为返回值

1.可以作为左值

fun_referance() = 99;
r = 99;
修改引用的内容

2.如果返回局部变量,需要加static。

2.5函数高级

内联函数

也叫做内嵌函数

是什么?

就是一个函数
在计算机编译阶段,将函数的代码拷贝到函数的调用处

有什么用?

以空间换时间
定义
inline void fun()
{}
特点

优势:减少函数的跳转,效率更高

劣势:代码量更大


0.相当于对编译器的一个建议

1.代码量很小(一般是5条语句以下)

2.频繁使用

3.声明和定义必须写在同一个文件里面(计算机需要在编译时,知道代码长什么样)

可以看汇编代码,来验证内联函数
和宏函数的区别
1、宏函数在预处理阶段,进行替换。内联函数在编译时进行替换。
2、内联函数本质上还是函数,编译器会检查语法错误

默认参数

函数的形参,可以有默认的值

函数不传实参,那么就使用默认值
函数传了实参,实参会覆盖默认值
特点

1.必须从后往前写默认参数

2.当函数有默认参数时,声明和定义需要写到一起。

3.引用类型不能有默认的值,可以有默认的变量

$$$函数重载overload

概念
函数名相同,但是功能/内容不同
特点

1.函数名

2.参数必须不一样(类型,数量)

3.处在同一个名字空间下面

思考

1.函数重载和默认参数
2.形参是引用类型,可不可以区分?
3.计算机在什么时候,知道该调用哪个函数的。在什么时候确定?
编译时确定。

3.内存模型和名字空间

作用域

概念

描述了一个名字在文件(编译单元)的多大范围内可见。

局部域

模块
函数

类域

不同的类,是单独的作用域

名字空间域

不同的名字空间,是单独的作用域

链接性

概念

描述了名称如何在各个单元中的共享

空链接

只在模块内可用

内部链接

本文件中使用

外部链接

可以在其他文件中使用

语言链接性

C++的程序,可以使用C的函数

存储性

自动:auto

静态:static

动态:malloc,new

new和delete

为什么不直接用malloc和free?

如果用malloc开辟对象空间,不会调用构造函数

new

用法

1.开辟一个元素的空间
int *p = new int;

2.开辟一个数组的空间
int *arr = new int[5];

3.开辟一个对象的空间
类 *p = new 类名;

初始化

int *p = new int(99);

int *arr = new int[5]{123};

Studen *zs = new Student(90, 'f', 18);

delete

1.回收单个元素
delete p;

2.回收数组空间
delete []arr;

计算机会记录每个内存块的大小和状态信息

名字空间

概念

一种作用域

作用

解决代码里面,标识符重名的问题

定义

namespace 标识符(名字)
{
	任何内容
	变量
	函数
	对象
}

使用

1.单独使用
名字空间::内容
::,表示作用域限定符
	作用域::内容
	
	
2.整个程序使用	
using namespace 名字;
直接使用内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2297250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO自定义数据集实现K折交叉验证——K-Fold Cross Validation

实现K折交叉验证&#xff08;K-Fold Cross Validation&#xff09;对于YOLO&#xff08;You Only Look Once&#xff09;自定义数据集的目标检测任务可以显著提升模型的可靠性和泛化能力。 1. 数据集准备 首先&#xff0c;你需要确保你的数据集符合YOLO的格式&#xff0c;具体…

go语言简单快速的按顺序遍历kv结构(map)

文章目录 需求描述用map实现按照map的key排序用二维切片实现用结构体实现 需求描述 在go语言中&#xff0c;如果需要对map遍历&#xff0c;每次输出的顺序是不固定的&#xff0c;可以考虑存储为二维切片或结构体。 假设现在需要在页面的下拉菜单中展示一些基础的选项&#xff…

【竞技宝】LOL-LPL:EDG3-0零封LNG

北京时间2月12日,英雄联盟LPL2025正在如火如荼的进行之中,昨日迎来LNG对阵EDG,以下是本场比赛的详细战报。 第一局: EDG:杰斯、赵信、维克托、女枪、芮尔 LNG:猴子、猪妹、飞机、韦鲁斯、布隆 首局比赛,EDG在蓝色方,LNG在红色方。阵容方面,EDG点出了杰斯、赵信、维克托、女枪…

在fedora41中安装钉钉dingtalk_7.6.25.4122001_amd64

在Fedora-Workstation-Live-x86_64-41-1.4中安装钉钉dingtalk_7.6.25.4122001_amd64.deb 到官网下载钉钉Linux客户端com.alibabainc.dingtalk_7.6.25.4122001_amd64.deb https://page.dingtalk.com/wow/z/dingtalk/simple/ddhomedownload#/ 一、直接使用dpkg命令安装deb包报错…

看期货用的指标,可以提示买卖点和K线转折变颜色的主图指标源码下载

A:MA(CLOSE,17)ABS(MA(CLOSE,17)-REF(MA(CLOSE,17),1)); B:MA(CLOSE,17)MA(CLOSE,17)-REF(MA(CLOSE,17),1); 分界线:IF(MA(CLOSE,17)<B,B,MA(CLOSE,17)),COLORFF00FF,LINETHICK2; 操作线:分界线-(EMA(C,3)-分界线),COLOR00FFFF,LINETHICK2; GUP:MA(C,5),COLORWHITE,LINE…

【PS 2022】Adobe Genuine Service Alert 弹出

电脑总是弹出Adobe Genuine Service Alert弹窗 1. 不关掉弹窗并打开任务管理器&#xff0c;找到Adobe Genuine Service Alert&#xff0c;并右键进入文件所在位置 2 在任务管理器中结束进程并将文件夹中的 .exe 文件都使用空文档替换掉 3. 打开PS不弹出弹窗&#xff0c;解决&a…

30天开发操作系统 第 20 天 -- API

前言 大家早上好&#xff0c;今天我们继续努力哦。 昨天我们已经实现了应用程序的运行, 今天我们来实现由应用程序对操作系统功能的调用(即API, 也叫系统调用)。 为什么这样的功能称为“系统调用”(system call)呢&#xff1f;因为它是由应用程序来调用(操作)系统中的功能来完…

蓝桥杯(B组)-每日一题(求最大公约数最小公倍数)

题目&#xff1a; 代码展现&#xff1a; #include<iostream> using namespace std; int main() {int m,n,x,y;cin>>m>>n;//输入两个整数int b;bm%n;//取余数xm;//赋值yn;while(b)//当余数不为0的时候{xy;//辗转相除求最小公约数yb;bx%y;}cout<<y<&…

arduino扩展:Arduino Mega 控制 32 个舵机(参考表情机器人)

参考&#xff1a;表情机器人中使用22个舵机的案例 引言 在电子制作与自动化控制领域&#xff0c;Arduino 凭借其易用性和强大的扩展性备受青睐。Arduino Mega 作为其中功能较为强大的一款开发板&#xff0c;具备丰富的引脚资源&#xff0c;能够实现复杂的控制任务。舵机作为常…

基于51单片机的门禁刷卡器proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1j0KAmH5pVGWZWRpT6p5hBg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

mapbox进阶,添加绘图扩展插件,裁剪线

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

19.4.6 读写数据库中的二进制数据

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 北风数据库中&#xff0c;类别表的图片字段在【数据表视图】中显示为Bitmap Image&#xff1…

MapReduce到底是个啥?

在聊 MapReduce 之前不妨先看个例子&#xff1a;假设某短视频平台日活用户大约在7000万左右&#xff0c;若平均每一个用户产生3条行为日志&#xff1a;点赞、转发、收藏&#xff1b;这样就是两亿条行为日志&#xff0c;再假设每条日志大小为100个字节&#xff0c;那么一天就会产…

Winform自定义控件与案例 - 构建炫酷的自定义环形进度条控件

文章目录 1、控件效果2、案例实现1、代码实现2、代码解释3、使用示例 4、总结 1、控件效果 2、案例实现 1、代码实现 代码如下&#xff08;示例&#xff09;&#xff1a; using System; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; …

【SpringBoot苍穹外卖】debugDay03.5

1、AOP面向切面编程 1. Target(ElementType.METHOD) 作用&#xff1a;指定自定义注解可以应用的目标范围。 参数&#xff1a;ElementType 是一个枚举类&#xff0c;定义了注解可以应用的目标类型。 ElementType.METHOD 表示该注解只能用于方法上。 其他常见的 ElementType 值…

flink实时集成利器 - apache seatunnel - 核心架构详解

SeaTunnel&#xff08;原名 Waterdrop&#xff09;是一个分布式、高性能、易扩展的数据集成平台&#xff0c;专注于大数据领域的数据同步、数据迁移和数据转换。它支持多种数据源和数据目标&#xff0c;并可以与 Apache Flink、Spark 等计算引擎集成。以下是 SeaTunnel 的核心架…

视频理解新篇章:Mamba模型的探索与应用

人工智能咨询培训老师叶梓 转载标明出处 想要掌握如何将大模型的力量发挥到极致吗&#xff1f;叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具&#xff08;限时免费&#xff09;。 1小时实战课程&#xff0c;您将学习到如何轻松上手并有效利用 Llama Facto…

分形几何表明数学一直存在有首、末的无穷序列

分形几何表明数学一直存在有首、末的无穷序列。一有穷长直线段S可变为锯齿状图形G而由无穷多无穷短直线段连接而成。G和S一样有左、右两个端点。

Python接口自动化测试—接口数据依赖

一般在做自动化测试时&#xff0c;经常会对一整套业务流程进行一组接口上的测试&#xff0c;这时候接口之间经常会有数据依赖&#xff0c;那又该如何继续呢&#xff1f; 那么有如下思路&#xff1a; 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时&#xff0c;…

C++ 实践扩展(Qt Creator 联动 Visual Studio 2022)

​ 这里我们将在 VS 上实现 QT 编程&#xff0c;实现如下&#xff1a; 一、Vs 2022 配置&#xff08;若已安装&#xff0c;可直接跳过&#xff09; 点击链接&#xff1a;​​​​​Visual Studio 2022 我们先去 Vs 官网下载&#xff0c;如下&#xff1a; 等待程序安装完成之…