C嘎嘎初次见面

news/2025/1/6 8:08:43/

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:掌握c++在C语言的不足的使用(命名空间),对缺省参数和函数重载掌握熟练,和内敛函数与引用有深刻的理解。

> 毒鸡汤:车子有油、手机有电、卡里有钱,这就是安全感,指望别人都是扯淡。再牛的副驾驶,都不如自己紧握方向盘。
> 望小伙伴们点赞👍收藏✨加关注哟💕💕 

🌟前言 

         终终终终于到C嘎嘎啦,喝了这么久的汤,终于可以吃口肉了,值得怀念。今天我们进入c++篇,c++的重要性我在这里就浅谈一下,目前c++已在Top2023榜上是第三名,可见c++这门语言依旧没有过时,耐人寻味。今天跟上小言子的步伐,迈进c嘎嘎世界。( auto关键字(C++11)    基于范围的for循环(C++11)  指针空值---nullptr(C++11))

主体  

        咱们从七大板块学习,命名空间,C++输入&输出,缺省参数,函数重载,引用,内联函数,拓展。 前六大板块基本上是解决C语言缺陷问题,后面的拓展板块才算C嘎嘎,想必大家已经迫不及待的想吃肉了,那咱们一口一口慢慢吃,上菜!!!



🌙命名空间

       在早期的C语言中是没有这块内容的,由于没有这个内容,在C语言中就有一个弊端,这个弊端就是在定义变量时与库的名冲突。为了解决这类问题,在c++中出现了命名空间这类知识点,避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。



💫命名空间定义

       命名空间定义的关键是namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。看下面图解是如何定义命名空间的:



重点:

💦命名空间中可以定义变量/函数/类型
💦命名空间可以嵌套
💦同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

在这里就不再提供案例了,咱们学到后期会详细介绍

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

💫命名空间使用

💦 加命名空间名称及作用域限定符
💦 使用using 将命名空间中某个成员引入
💦 使用using namespace 命名空间名称 引入


🌙C++输入&输出

        在C语言中我们有printf输出,scanf输入,咱们祖师爷认为这种方法过于复杂,因此c++独特的输入和输出。

看图解:



这里捏大家就算见识一下咯,等到后面学各种流时会再次介绍。

std是C++标准库的命名空间,如何展开std使用更合理呢?
💦 在日常练习中,建议直接using namespace std即可,这样就很方便。
💦using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对
象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模
大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空+using std::cout展开常用的库对象/类型等方式。

🌙缺省参数

        缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。没有合适的场合下使用这个知识点,可能大家理解不是很深刻,简单有个印象就行,咱们看看下面的图解:




注意:

缺省值必须是常量或者全局变量。

🌙函数重载

        直接谈函数重载可能有唐突,因此我们直接放在场景中来解释,大家可能遇到这样的情况,实现两个数相加,有整形类型相加,有double类型相加面对这个问题实现多个函数,就会造成代码过多,不利我们解读代码,这里就需要函数重载。那什么是函数重载捏?

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

看图解:



这里我们要记住函数重载三个点,方可形成函数重载。

💦参数类型不同
💦参数个数不同
💦参数类型顺序不同

        不知道大家有没有这样的问题,实现函数重载函数的返回值需要相同嘛,答案是不要相同,这个小知识点大家记住。

        如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办
法区分。

🌙引用

        不知道大家还记得单链表中需要改变链表的指向需要二级指针,而二级指针过于复杂,因此在c++中引出了引用这个知识点,而引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。具体是如何实现的捏,咱们看图解:



引用注意事项:

💦引用在定义时必须初始化(就好像用外号必须有你这个人)
💦 一个变量可以有多个引用(就好像一个人有多个外号)
💦引用一旦引用一个实体,再不能引用其他实体(就好比一个村子里面有两个张三但是不是同父母不能,因此取外号时,他们不能同时叫狗蛋,狗蛋只能属于一个张三)

使用引用时,使用范围只能缩小,不能放大,这是啥意思捏,举个栗子(刚出生的小孩,一开始不能叫人家大男孩,只能叫人家小宝宝,不可放大对别人叫法),看图解:



💫传值、传引用效率比较

        以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

💫引用和指针的区别

使用指针:需要开辟空间的,有相应的地址,

引用:

  1. 语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。
  2. 底层实现上实际是有空间的,因为引用是按照指针方式来实现的。
咱们看看上面的区别就行,乐呵乐呵。具体还是得看下面这段文字:
引用和指针的不同点:
  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
  4. 没有NULL引用,但有NULL指针
  5.  在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)
  6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  7.  有多级指针,但是没有多级引用 
  8.  访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  9. 引用比指针使用起来相对更安全

🌙内联函数

        以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。看图解:



1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会
用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运
行效率。
2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建
议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不
是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性
3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址
了,链接就会找不到。

🌙拓展

💫auto关键字

        随着程序的续写,程序越来越复杂,对变量的类型可能会忘记,因此在c++中引用了auto关键字,在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。看图解:



        auto这个关键字就讲到这里,为什么捏?这个关键字存在歧义,在代码过多时,其实auto并不受欢迎,如果下一个程序员来写这段代码,都不知这些变量类型是啥,因此这个关键字要用少用,能不用就不用。

💫基于范围的for循环

        这块知识点呢,并不适合在这里讲解,这里大家乐呵乐呵就行,毕竟C嘎嘎刚刚开始嘛,咱们看看下面图解:




💫指针空值nullptr 

        C语言中有一个NULL,有人说NULL是空,又人说NULL是0,还人说NULL是个宏,在这块在C语言中就有争议。其实捏,在传统的C语言中,NULL其实是一个宏可以看出,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦。因此在c++中有了nullptr这个知识点
注意:

  1. 在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入
  2. 在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
  3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

🌟结束语

       今天是C嘎嘎初次见面也是C嘎嘎初阶,大家放心C嘎嘎后面的博客博主会继续更新,加油。时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。


http://www.ppmy.cn/news/1164800.html

相关文章

【持续更新】tutorial-Linux-Markdown-etc(Linux、命令、Markdown、md、Tex、LaTex)

1. Linux命令 1.1 常用 查看文件夹下文件数量: ls -l | wc -l7zip: 解压:7z x compressed_file.7z -o/path/to/destination # 注意-o和目标路径是连起来的,没有空格压缩:7z a compressed_file.zip destination_path conda 查看 conda 拥有的…

Linux安装MINIO

MINIO简介MINIO目录 mkdir -p /opt/minio/data && cd /opt/minio MINIO下载 wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio MINIO授权 chmod x minio MINIO端口 firewall-cmd --zonepublic --add-port7171/tcp --permanent && firewal…

2023年中国车载导航仪产量、销量及市场规模分析[图]

车载导航仪是一种用于汽车上的电子设备,用于帮助驾驶员找到目的地并规划路线,它通常使用地图软件和GPS定位技术来确定车辆的位置,并提供语音和图形指示,以指导驾驶员前往目的地。 车载导航仪行业分类 资料来源:共研产…

Golang中的type关键字

type关键字在Go语言中有五种用法: 定义结构体定义接口类型别名类型定义类型开关其中,定义结构体和定义接口是Go语言中常用的类型定义方式,类型别名和类型定义则是为了方便程序员使用而设计的,而类型开关则是Go语言中比较特殊的一种类型定义方式。 定义结构体 结构体是由一…

EDID详解

文章目录 字节含义一些概念YCC位 文章目录 字节含义一些概念YCC位 字节含义 EDID通常由128个字节组成,这些字节提供了关于显示器的各种详细信息。以下是EDID中每个字节位表示的一般含义: Header(头部): 字节0: Header&#xff…

虚拟音频设备软件 Loopback mac中文版软件介绍

创建虚拟音频设备以从应用程序和音频输入设备获取声音,然后将其发送到音频处理应用程序,它就是—Loopback for Mac,Loopback mac为您提供高端工作室混音板的强大功能,有了它在Mac上传递音频会变得很容易。 Loopback for mac中文版…

机器学习(23)---Boosting tree(课堂笔记)

文章目录 一、知识记录二、题目2.1 题目12.2 题目22.3 答案书写 一、知识记录 二、题目 2.1 题目1 2.2 题目2 2.3 答案书写

Python利用队列Queue实现多进程Process间通信

背景: 我在利用大模型进行推理的时候,一个机器上面有8张GPU卡,如何充分的利用这几张卡呢?最开始想到的是利用Python多线程方案,可代码实现之后发现虽然我在环境变量里面设置可以使用多张GPU卡,可程序依然只…