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

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.mzph.cn/news/895412.shtml

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

相关文章

SQL-leetcode—1581. 进店却未进行过交易的顾客

1581. 进店却未进行过交易的顾客 表&#xff1a;Visits -------------------- | Column Name | Type | -------------------- | visit_id | int | | customer_id | int | -------------------- visit_id 是该表中具有唯一值的列。 该表包含有关光临过购物中心的顾客的信息。 …

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依赖 JDK 环境 查看 Mac JDK 环境&#xff0c;如果没有安装&#xff0c;先安装 打开终端输入命令:java -version Mac安装配置 JDK 二. 检查 HomeBrew 安装 检查 HomeBrew 是否安装&#xff0c;终端输入命令:brew -v Mac安装HomeB…

鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)

文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同&#xff0c;业务逻辑不同2.2、类型1和类型2布局不同&#xff0c;但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…

【AI大模型】Ollama部署本地大模型DeepSeek-R1,交互界面Open-WebUI,RagFlow构建私有知识库

文章目录 DeepSeek介绍公司背景核心技术产品与服务应用场景优势与特点访问与体验各个DeepSeek-R系列模型的硬件需求和适用场景 Ollama主要特点优势应用场景安装和使用配置环境变量总结 安装open-webui下载和安装docker desktop配置镜像源安装open-webui运行和使用 RagFlow介绍主…

更加通用的Hexo多端部署原理及实现,适用于各种系统之间

本文推荐在作者的个人博客网站阅读&#xff1a;shenying.online 一、故事背景 故事发生在大学上学期间&#xff08;而不是寒假&#xff09;。上学期间&#xff0c;宿舍条件极其恶劣&#xff0c;半夜断电、空间狭小。我们大学垃圾条件使用游戏本的种种弊端被无限放大&#xff1…

开源、免费项目管理工具比较:2025最新整理30款

好用的开源、免费版项目管理系统有&#xff1a;1.Redmine&#xff1b;2. Taiga&#xff1b;3. OpenProject&#xff1b; 4.ProjectLibre&#xff1b; 5.GanttProject&#xff1b; 6.Tuleap&#xff1b; 7.Trac&#xff1b;8. Phabricator&#xff1b; 9.Notion&#xff1b; 10.…

组织结构改革:激活企业活力的 “源头活水”

难以适应市场变化、内部沟通与协作不畅、决策效率低下、运营成本增加、人才流失严重、员工士气下降、战略目标难以实现……企业如何根据市场环境变化和自身发展需求&#xff0c;灵活调整组织框架&#xff0c;赋能企业的持续健康发展&#xff1f; 某国有投资建设集团旗下的二级…

oracle中decode怎么转换成pg

对于 PostgreSQL 中的 Oracle DECODE 函数&#xff0c;可以使用 CASE 表达式或联合。CASE 表达式根据条件返回第一个匹配的结果&#xff0c;语法为&#xff1a;CASE WHEN 条件 THEN 结果 ELSE 结果 END。联合通过 UNION ALL 操作符组合多个 SELECT 语句&#xff0c;返回一个包含…

Mac之JDK安装

Mac之JDK安装 一.安装 jdk 打开终端输入命令:java -version 查看是否已安装 JDK Oracle 官方下载地址 根据自己Mac 系统安装 查看 Mac 系统&#xff0c;打开中断命令&#xff0c;输入: uname -a Compressed Archive 是压缩文档&#xff0c;下载的是一个 .tar.gz 压缩包 D…

【含文档+PPT+源码】基于Python的全国景区数据分析以及可视化实现

项目介绍 本课程演示的是一款基于Python的全国景区数据分析以及可视化实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该…

Unity中快速制作2D沙雕动画:流程编

Unity中快速制作2D沙雕动画&#xff08;搞笑/无厘头风格&#xff09;&#xff0c;通过以下方案实现低成本、高成效的开发流程&#xff0c;结合夸张的动作、滑稽的物理效果和魔性音效&#xff1a; 1. 角色与素材设计 核心原则&#xff1a;丑萌即正义&#xff0c;越怪越好&#…

保存字典类型的文件用什么格式比较好

保存 Python 字典类型的数据时&#xff0c;有几个常见的格式可以选择&#xff0c;这些格式都具有良好的可读性和提取内容的便利性。以下是几种推荐的格式&#xff1a; JSON 格式&#xff1a; 优点&#xff1a;JSON 格式非常适合存储和传输结构化数据&#xff0c;具有良好的跨平…

SQL注入之布尔和时间盲注,sqli-labs

实验环境&#xff1a; sqli-labs&#xff0c;小皮面板搭建&#xff0c;edge浏览器 apache&#xff1a;2.4.39&#xff0c;MySQL&#xff1a;5.7 PHP&#xff1a;5.39 Python&#xff08;pycharm2023&#xff09;:3 less-8 布尔盲注&#xff1a; 1.我这里是采用最简单的直接采…

基于SSM的农产品供销小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、农户功能模块&#xff1a;用户管理、农户管理、产品分类管理、农产品管理、咨询管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试…

移植BOA服务器到GEC2440开发板

所需软件:boa-0.94.13.tar.tar(下载:http://www.boa.org/boa-0.94.13.tar.gz) 步骤: 设置好交叉编译工具链。 1、解压下载好的压缩包(tar xzvf boa-0.94.13.tar.tar),并进入解压后的目录(cd boa-0.94.13),再进行如下操作: 先进入到src目录(下面操作都是在该目录下进行…

Go 语言里中的堆与栈

在 Go 语言里&#xff0c;堆和栈是内存管理的两个重要概念&#xff0c;它们在多个方面存在明显差异&#xff1a; 1. 内存分配与回收方式 栈 分配&#xff1a;Go 语言中&#xff0c;栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时&#xff0c;Go 会自动为其…

从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统

在当今的数字化时代,3D重建技术正在迅速发展,并广泛应用于文旅、空间智能和3D重建等领域。为了简化360度全景相机拍摄数据的处理流程,提高3D场景重建的质量和效率,我们开发了一款专门处理360度全景相机数据的3D重建系统——SC-Omnigs。本文将详细介绍这一系统的功能、特点及…

LayUi table 列宽 th和td不同步变化

原因 在td所在的table中&#xff0c;当table宽度小于页面宽度&#xff0c;滚动条会消失&#xff0c;进而table会被加以下样式 style"width: auto"解决 在layui.js中将以下语句 !p&&h?y.width(o.getContentWidth(l)):y.width("auto")替换成 !…

HARCT 2025 分论坛10:Intelligent Medical Robotics智能医疗机器人

会议名称&#xff1a;机电液一体化与先进机器人控制技术国际会议 会议简称&#xff1a;HARCT 2025 大会时间&#xff1a;2025年3月28日-30日 大会地点&#xff1a;中国桂林 主办单位&#xff1a;桂林航天工业学院、广西大学、桂林电子科技大学、桂林理工大学 协办单位&…

前端可以不用依赖后端实现导出大数据了

theme: channing-cyan hightlight: channing-cyan 前言 在我们公司表格数据导出都是前端去处理。一开始数据量不大&#xff0c;倒没什么问题。但随着数据量的加大&#xff0c;问题也逐渐暴露出来。 一天的数据量有一来万条&#xff0c;导出一定时间范围的数据&#xff0c;30…