C++ 第一弹入门基础

news2024/11/15 7:20:18

目录

目录

1.关键字

2.命名空间

3.标准IO输入输出

4.缺省参数

5.函数重载

6.引用

7.内联函数

1.关键字

c++98的关键字一共有63个 在之后用的时候都会再次详细介绍 

2.命名空间

2.1什么是命名空间,为什么要有他?

在c++中为了避免相同名字的变量,函数,类发生名字冲突,使用namespace关键字进行命名空间定义 namespace+空间名 {} 命名空间定义了新的数据域,命名空间的所有内容都局限于该空间,命名空间可以嵌套 如果出现多个名字相同的命名空间 编译器会将他们合成到一个命名空间中。

 2.2命名空间的使用方法? 

比如namespace N {int a;}   

1. 加命名空间名称及作用域限定符 N::a 

2. 使用using将命名空间中成员引入using N::a

3.使用using namespace 命名空间名称引入 using N

3.标准IO输入输出

3.1什么是标准IO输入输出?

用cin--istream cout--ostream  搭配流插入,流输出运算符

由于历史问题 很多时候编译器不支持iostream.h这个头文件 所以推荐使用std::cin std::cout这种方式

3.2为什么要使用他们呢?

使用方便,不需要格式控制,因为在istream和ostream类中,已经将所有内置类型的输入和输出重载过了

3.3对于自定义类型opterator>> 和operator<<()的重载

必须重载成友元函数

4.缺省参数

4.1什么是缺省参数?

缺省参数是声明或定义函数时 为函数的函数指定的一个缺省值 。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。说人话就是,你在定义一个函数的时候,带了一个函数参数的赋值,如果在调用的时候没有进行传参,那么函数就会使用自己带的那个参数的值。

4.2缺省参数分类

分为全缺省和半缺省 全缺省就是全给赋值 半缺省就是部分给赋值

4.3注意事项

半缺省参数必须从右往左依次来给出,不能间隔着给                                                                     缺省值必须是常量或者全局变量
缺省参数不能在函数声明和定义中同时出现 如果同时出现编译器无法区分那个是缺省

5.函数重载

5.1什么是函数重载,为什么要有他?

是函数的一种特殊情况, C++ 允许在同一作用域中 声明几个功能类似的同名函数 ,这些同名函数的形参列表(参数个数或类型或类型顺序不同) ,常用来处理实现功能类似数据类型 不同的问题。

说人话就是在一个作用域里面声明一个同名的函数 他们可以是参数类型不同,参数个数不同,参数类型顺序不同,如果函数名和参数一样,返回值要相同。

5.2函数重载的调用原理?

在编译时,编译器会对传递的实参类型进行推演,根据推演的结果选择合适的类型的重载函数进行调用; 如果存在类型完全匹配的函数,则直接调用;如果参数类型不是完全匹配,则编译器会尝试进行隐式类型转换,如果转换之后有合适的函数可供调用,则调用,否则编译失败

5.3为什么C++能支持函数重载但是C却不支持呢?

C的函数名字修饰规则是在函数名前面加_,而C++可以通过函数修饰规则(将类型信息也编译到名字中)来区分 但是C无法区分

5.4extrem 'C‘的使用,为什么要有?

很多情况下我们都会对C和C++进行混编,但是C语言和C++的编译器对函数名字修饰规则不同,在C和C++混合编程的场景中,就需要保证最终的名字一致

5.5常见的约定调用 

自己百度一下吧 

6.引用

6.1什么是引用?

感性理解:引用相当于起别名比如刘备 别人也可以叫他刘玄德 但是这两个名字指向同一个人 所以引用起别名让别名也可以指向和本名同一块地址空间并不会产生新的地址,这样导致了引用的时候必须有原名(必须初始化) 不能多个人用一个别名要不分不清但是一个人可以有很多外号(别名)所以一个变量可以有多个引用 引用一旦指向了一个人不能再指向其他人 const常量不能引用,类型不同不能引用

引用可以用关键字& 

6.2为什么要用引用呢?

6.2.1传参传返回值效率更快 但是这是为什么?

感性理解:我要找张三 张三直接来找我耗费的资源肯定比张三找了第三个人来和我做事情的消耗资源要低

理解:传值返回的时候由于所传的返回值在出函数的时候函数栈帧就已经销毁了 所以传值返回本质上是传回了值的临时拷贝 但是引用返回可以省去临时拷贝的时间 效率高

注意:作为返回值的时候不能返回函数栈上的空间

6.3指针和引用的区别是什么?

在语法上 引用是起别名所以没有自己的内存空间 但是在底层实现上引用是对指针进行了封装所以是有自己的内存空间的 T&--->T* const     const T& ---> const T* const

不同点:

1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用在定义时必须初始化 ,指针没有要求
3. 引用在初始化时引用一个实体后,就不能再引用其他实体 ,而指针可以在任何时候指向任何一个同类型实体
4. 没有NULL引用,但有 NULL 指针
5. 在sizeof中含义不同:引用 结果为引用类型的大小,但指针始终是地址空间所占的字节数 (32位平台下占4 个字节 )
6. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,没有多级引用
8. 访问实体方式不同,指针需要自己解引用,但是引用编译器自己搞
9. 引用比指针更安全

7.内联函数

7.1什么是内联函数,为什么要有他?

以inline修饰的函数叫做内联函数,编译时C++ 编译器会在调用内联函数的地方展开 ,没有函数调
用建立栈帧的开销,内联函数提升程序运行的效率。用人话说就是,你给一个函数前面加上inline关键字,那么这个函数就只会在被调用的时候展开
7.2为什么要用内联函数? 
一个函数如果是内联函数那么他在编译阶段展开,减小了调用开销,提高运行效率,但是会使目标文件变大,所以本质是一种空间换时间的做法,而且一个函数就算加了inline关键字他也不一定就是内联函数,因为inline关键字他只是抛出一个建议,并不一定会被采纳。内联函数声明和定义不要分离,否则会出现链接错误。
7.3内联函数和宏函数的区别

内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。
宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。
inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。


7.4宏的优缺点

优点:增强代码复用性,减少冗余代码。提高性能,提升代码运行效率。

缺点:宏不方便调试,很多错误无法在调试中发现。会导致代码可读性差,可维护性差,容易误用。没有安全的检查,具有副作用。

宏的替代:宏常量:用const定义常量来替代宏常量。宏函数:使用内联函数来替代宏函数。

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

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

相关文章

torchvision.utils.save_image()保存tensor显示图片异常问题解决

用torchvision.utils.save_image()保存图片时出现异常 有些像素点会显示为全黑&#xff08;灰度图&#xff09;&#xff0c;如下图所示&#xff0c;第一张和第三张图 刚开始以为是图像数据分布范围的问题&#xff0c;在保存之前输出图像tensor的最大max和最小min值&#xff0c;…

【Python 基础篇】Python 模块与包

文章目录 引言一、模块与包概述二、模块的导入和使用三、包的组织和导入四、实际应用场景五、总结 引言 在Python编程中&#xff0c;模块和包是组织和复用代码的重要工具。随着项目规模的增长&#xff0c;将代码按照功能模块化并组织成包&#xff0c;可以提高代码的可读性、可…

吴恩达ChatGPT《Building Systems with the ChatGPT API》笔记

1. 课程介绍 使用ChatGPT搭建端到端的LLM系统 本课程将演示使用ChatGPT API搭建一个端到端的客户服务辅助系统&#xff0c;其将多个调用链接到语言模型&#xff0c;根据前一个调用的输出来决定使用不同的指令&#xff0c;有时也可以从外部来源查找信息。 课程链接&#xff1a…

设计模式之桥接模式笔记

设计模式之桥接模式笔记 说明Bridge(桥接)目录桥接模式示例类图视频文件接口avi视频文件类rmvb视频文件类抽象的操作系统类windows类mac类测试类 说明 记录下学习设计模式-桥接模式的写法。JDK使用版本为1.8版本。 Bridge(桥接) 意图:将抽象部分与其实现部分分离&#xff0c…

用微分方程描述的连续时间滤波器举例

用微分方程描述的连续时间滤波器举例 在许多应用中&#xff0c;频率选择性滤波器是用线性常系数微分或差分方程描述的线性时不变系统来实现的。这有许多理由&#xff0c;例如很多具有滤波作用的物理系统都是由微分或差分方程表征的。这方面的一个很好的例子就是在后续将研究的汽…

消息中间件相关知识简介

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&am…

Python 基础(十五):模块

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、什么是模块二、自定义模块三、引用其它模块3.1、使用 import 引用模块3.2、使用 f…

揭秘Java 8的新特性:Stream API的使用和实践

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. 集合处理数据的弊端 2. Stream流式思想概述…

VN8911/VN8912(A)/VN8914/VN8910(A)上安装驱动

问题&#xff1a; 如何在 VN8911、VN8912(A) 或 VN8914 设备上安装驱动程序&#xff1f; 背景&#xff1a; VN8911、VN8912(A) 或 VN8914 设备 [下面概括为 VN8900 系列&#xff0c;不包括 VN8910(A)] 与 CANoe 一起使用时作为分布式实时系统运行 [参见下面的 CANoe 11.0 和 V…

vue插槽概念解释

官方文档 https://cn.vuejs.org/guide/introduction.html 什么是插槽 在 Vue.js 中&#xff0c;插槽&#xff08;Slots&#xff09;是一项非常有效的功能&#xff0c;它允许我们在组件中预留一个占位符&#xff0c;供父组件插入自定义的内容。 具体来说&#xff0c;当一个组件…

Linux和Shell:开源力量与命令行之美

目录 一、概述二、Linux的简单介绍三、Shell的简单介绍四、Linux和Shell的应用领域五、Shell编程结语&#xff1a; 一、概述 Linux和Shell是开源世界中不可或缺的两个重要组成部分。Linux作为一种自由和开放的操作系统&#xff0c;以其稳定性、安全性和可定制性而备受推崇。而S…

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统&#xff1b;实现NoC的RTL设计 0. NoC多核片上网络生成器ProNoCProNoC的功能实现 1. 生成一个叫做Mor1kx SoC的单个Tile&#xff08;包含NI网络接口&#xff09;1.1 打开ProNoC用于生成Tile的GUI界面1.2 为Tile添加时钟…

Python基础篇(四):基本数据类型的学习和示例

Python基础篇(三)&#xff1a;基本语句的示例和说明 基本数据类型的学习和操作 1. 数值类型1.1 整数&#xff08;int&#xff09;1.2 浮点数&#xff08;float&#xff09;1.3 复数&#xff08;complex&#xff09; 2. 字符串类型2.1 字符串的定义2.2 转义字符2.3 多行字符串2…

Vue-几种插槽(slot)的使用

插槽(slot) 插槽在vue中是一种很常见的写法&#xff0c;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式 一共有三种分类&#xff1a;默认插槽、具名插槽、作用域插槽&#xff0c;下面一一根据案例改造说明 1 基本案例 首先编写一个基本的案…

12.1 物业管理项目中的新知识点

1.RESTful 2.雪花ID 3.mybatis的动态sql 很多时候需要实现多条件查询&#xff0c;手动判断拼接sql有些麻烦 mybatis提供了一个动态sql实现多条件查询的方法 3.1 if元素 使用if元素可以根据条件来包含或排除某个SQL片段 <select id"search" resultType"Hous…

OpenCV——实验结果输出《图像金字塔》和《图像轮廓》

1.高斯金字塔 img cv2.imread(./AM.png) print(img.shape) upcv2.pyrUp(img) cv_show(up,up)#只是将图片的大小改变了,并且是2倍2倍的增长。 print (up.shape) downcv2.pyrDown(img) cv_show(down,down) print(down.shape) up_downcv2.pyrDown(up) cv_show(up_down,np.hstack…

SSMP整合案例(4) Spring Boot整合MyBatis-Plus实现分页查询

文章 SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作我们编写了MyBatis-Plus以Druid为数据源的方式 做了数据库的增删查改操作 那么 下面我们继续写 分页查询 我们 先写这样一段代码 bookDao.selectPage()selectPage就是BaseMapper提供给我们的分页查询函数 但…

【Spring Cloud + RabbitMQ 实现分布式消息总线】—— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d R a b b i t M Q 实现分布式消息总线 \color{#FF1493}{Spring Cloud RabbitMQ 实现分布式消息总线} SpringCloudRabbitMQ实现分布式消息总线&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; …

redis集群原理

redis是单线程&#xff0c;但是一般的作为缓存使用的话&#xff0c;redis足够了&#xff0c;因为它的读写速度太快了。 官方的一个简单测试&#xff1a; 测试完成了50个并发执行100000个请求。 设置和获取的值是一个256字节字符串。 结果:读的速度是110000次/s,写的速度是81000…

基于JAVA的高校心理咨询系统/ 基于web的高校心理咨询系统/心理咨询系统

​ 摘 要 近年来,基于网络的高校心理咨询系统已成为社会的发展趋势&#xff0c;我国对高校心理咨询非常重视&#xff0c; 高校心理咨询工作面临着严峻考验&#xff0c;而网络的普及为高校心理咨询的信息化提供了必要的条件。本文主要研究了如何设计和开发基于B/S 高校心理咨询…