C嘎嘎初次见面

简介: C嘎嘎初次见面

> 作者简介:დ旧言~,目前大二,现在学习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嘎嘎后面的博客博主会继续更新,加油。时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小说手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

目录
相关文章
|
11月前
|
传感器 监控 搜索推荐
智能服装:集成健康监测功能的纺织品——未来穿戴科技的新篇章
【10月更文挑战第7天】智能服装作为穿戴科技的重要分支,正以其独特的技术优势和广泛的应用前景,成为未来科技发展的亮点之一。它不仅改变了我们对服装的传统认知,更将健康监测、运动训练、医疗康复等功能融为一体,为我们的生活带来了更多的便利和可能。随着技术的不断进步和市场的日益成熟,我们有理由相信,智能服装将成为未来穿戴科技的新篇章,引领我们走向更加健康、智能、可持续的生活方式。
|
机器学习/深度学习 人工智能 监控
智能增强:人工智能在个性化学习中的应用
【7月更文挑战第3天】随着人工智能技术的飞速发展,教育领域正经历着一场革命。本文将探讨AI如何通过智能增强技术,实现个性化学习,从而提高教育质量和效率。我们将分析AI在识别学生需求、适应不同学习风格、提供实时反馈和调整教学内容方面的能力,并讨论这些技术对传统教育模式的影响,以及未来可能的发展方向。
293 0
|
数据采集 机器学习/深度学习 算法
数据治理之参考数据与主数据管理
最近凑巧参与了一次某行业的业务共创会议,期间讨论到了主数据系统,还有我们该如何参与主数据系统建设的话题。说实话,我一直以为我不会有机会参与到主数据与参考数据系统的话题中去,所以,又去把DAMA的书籍翻了翻。顺便也重新思考了一下主数据与参考数据这个数据治理的课题。
3063 1
数据治理之参考数据与主数据管理
|
存储 搜索推荐 数据可视化
【Elasticsearch】Elasticsearch索引创建与管理详解
【Elasticsearch】Elasticsearch索引创建与管理详解
1300 10
|
机器学习/深度学习 Python
【Python 机器学习专栏】堆叠(Stacking)集成策略详解
【4月更文挑战第30天】堆叠(Stacking)是机器学习中的集成学习策略,通过多层模型组合提升预测性能。该方法包含基础学习器和元学习器两个阶段:基础学习器使用多种模型(如决策树、SVM、神经网络)学习并产生预测;元学习器则利用这些预测结果作为新特征进行学习,生成最终预测。在Python中实现堆叠集成,需划分数据集、训练基础模型、构建新训练集、训练元学习器。堆叠集成的优势在于提高性能和灵活性,但可能增加计算复杂度和过拟合风险。
1605 0
|
数据采集 存储 分布式计算
数据爆炸时代的挑战与机遇:大规模数据处理的技术突破
在当今数字化时代,数据量呈现爆炸式增长,给传统数据处理带来了巨大挑战。本文将探讨大规模数据处理所面临的问题,并介绍一些技术突破,如分布式计算、云计算和人工智能,以应对这一挑战。通过有效处理和分析海量数据,我们将迎来更多的机遇和创新。
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型的预训练[4]:指示学习Instruction Learning详解以及和Prompt工程、ICL区别
大语言模型的预训练[4]:指示学习Instruction Learning详解以及和Prompt工程、ICL区别
|
SQL Oracle 安全
如何使用JDBC操作数据库?一文带你吃透JDBC规范(一)
如何使用JDBC操作数据库?一文带你吃透JDBC规范(一)
558 1
|
存储 分布式计算 负载均衡
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
Hadoop生态系统中的数据存储技术:HDFS的原理与应用
|
开发框架 Rust 安全
Rust vs C++ 深度比较
Rust vs C++ 深度比较
1961 0
Rust vs C++ 深度比较