首页 > 编程语言 >C++入门 一(命名空间,缺省参数,超详细!!!)

C++入门 一(命名空间,缺省参数,超详细!!!)

时间:2024-09-10 22:53:19浏览次数:13  
标签:入门 space 缺省 C++ 空间 查找 命名

文章目录

C++与C语言的区别

C++在保留了C语言所有特性的基础上增加了面向对象编程的支持,并引入了更多的高级特性和工具来提高代码的可读性、可维护性和可扩展性。而C语言则更加简洁和底层,适用于对性能要求极高或对内存管理有严格要求的场景。

命名空间(Namespace)

在C++中,命名空间是一种封装事物的方式,它可以包含类、函数、变量等。命名空间的主要目的是防止名称冲突,使得代码更加模块化和清晰。你可以把命名空间想象成一个“容器”或“文件夹”,它将相关的代码元素组织在一起,并与其他命名空间隔离开来。

为什么需要命名空间?
随着程序变得越来越复杂,特别是当使用多个库或模块时,很可能会出现名称冲突。例如,两个不同的库可能都有一个名为compute的函数。如果没有命名空间,编译器将无法区分这两个函数,从而导致编译错误。命名空间通过为每个库或模块提供一个唯一的“标签”,从而解决了这个问题。
在这里插入图片描述
在这里插入图片描述
观察以上两图可以看到,因为全局变量rand与<stdlib.h>这个库函数里的函数rand同名了,所以报错显示重定义,而使用命名空间就可以避免这个现象。

如何定义命名空间?
在C++中,需要使用namespace关键字,后面跟命名空间的名字,然后接一对 { } 即可,{ } 中即为命名空间的成员。下面是一个简单的例子:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6415d44e6da7459688590f7f5447d99f.png在这里插入图片描述
这里space是该命名空间的名字,也可以取别的名字,如果要使用该命名空间的成员就在成员名前面加上命名空间的名字:: ,如上图就是space:: ,这样就不会重定义了。

命名空间可以定义变量/函数/类型等,如下图
在这里插入图片描述
命名空间也可以嵌套使用
在这里插入图片描述
同一个工程中允许多个相同名称的命名空间,编译器最后会合成同一个命名空间中
一个工程中的test.h和上面test.cpp中两个

在讲命名空间的使用之前,先讲一下C++中的域。
C++中有四种域:局部域,全局域,命名空间域,类域,本文章只讲前三种
一般情况下,查找的优先级为局部域 > 全局域 > 命名空间域
下图打印出了1,因为先查找的是局部域
在这里插入图片描述
默认的查找规则下,是先局部,后全局,但是不会默认去命名空间里查找在这里插入图片描述
::表示域作用限定符
一旦你指明了域,那它就不会去其他地方找了
域作用限定符,前面如果不加任何东西,就表示访问全局
在这里插入图片描述
每次使用命名空间里的数据都需要写space::比较麻烦,所以就有了展开命名空间
如果该变量只存在于命名空间内,展开命名空间后就不需要写space::而是可以直接使用了
在这里插入图片描述
如果在命名空间,全局域,局部域同时存在相同的变量,那如果不用space::就会查找局部域,还是遵循局部优先原则
在这里插入图片描述
如果注释掉局部变量,这时就会报错,因为它是展开到了全局,展开命名空间本质上:给了查找的权利—查找优先级和全局域是一致的 ,因为优先级相同,在没有指定的情况下就不知道查找哪个,如果要查找全局域就在变量名前加上:: ,如果要查找命名空间域就在变量名前加上space:: ,这个space只是这个命名空间的名字,名字可以随意取
在这里插入图片描述
还可以只展开指定部分,下图因为指定展开了a变量,所以可以使用a变量,但是因为没有展开b变量,所以会显示未定义

在这里插入图片描述

缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参
下图中F1函数中形参a就表示缺省,1就是它的缺省值
在这里插入图片描述
全缺省就是形参中都被赋值了
在这里插入图片描述
缺省只能从右往左缺省,因为传参数是从左往右进行的
在这里插入图片描述
在这里插入图片描述
在缺省函数里传参要按顺序传,不能跳跃着传,否则会报错
在这里插入图片描述

缺省参数不能声明和定义同时给,声明和定义任意给一个即可
缺省值相同或者不相同都会显示重定义
↓缺省值相同
在这里插入图片描述
↓缺省值不相同
在这里插入图片描述

缺省函数有一个很重要的功能就是方便扩容,如链表或者栈中的扩容环节
在这里插入图片描述

标签:入门,space,缺省,C++,空间,查找,命名
From: https://blog.csdn.net/2301_79381549/article/details/142035269

相关文章

  • 基于Axis 1.4的Web Service入门
    最近有个客户使用的是Axis1.4创建的WebService,很久没用了,所以整理下这块的知识。基于JDK1.8和EclipseMars开发一个简单的HelloworldWebServicepublicinterfaceHelloService{ Stringhello(Stringname);}publicclassHelloServiceImplimplementsHelloService{......
  • c++引用
    c++指针和引用的区别指针和引用在C++中都用于间接访问变量,但它们有一些区别:指针是一个变量,它保存了另一个变量的内存地址;引用是另一个变量的别名,与原变量共享内存地址。指针(除指针常量)可以被重新赋值,指向不同的变量;引用在初始化后不能更改,始终指向同一个变量。指针可以为......
  • C++入门知识
    命名空间为什么会有命名空间?解决C语言中命名冲突的问题。(std是所有c++库的命名空间)解决方法:采用域作用限定符(::):指定编译器搜索的位置。编译器默认的搜索顺序:先局部再全局。命名空间域大体有4种域:全局域、局部域、命名空间域、类域。命名空间域的特点:1.不会影响生命......
  • 挑战不可能篇1——洛谷28分钟14道CCF GESP C++ 一级上机题&洛谷14道题题解
    扯谈今天继续挑战不可能:洛谷28分钟14道题这我个人认为不简单,算上编译、提交、命名等杂七杂八的东东之后,只剩下了大约1分钟/题。本次挑战的是CCFGESPC++一级上机题.这竟然能成功!下面附上每一题第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题......
  • 机器学习入门篇
    文章目录什么是机器学习?常见机器学习框架经典算法及使用场景1.监督学习(SupervisedLearning)2.无监督学习(UnsupervisedLearning)3.半监督学习(Semi-SupervisedLearning)4.强化学习(ReinforcementLearning)5.集成学习(EnsembleLearning)6.深度学习(DeepLearning)什......
  • JavaScript语法入门四
    变量变量就是在内存中开辟一块用于存储信息的空间。变量命名1.        变量名称必须仅包含字母,数字,符号 $ 和 _。2.        首字符必须非数字。3.        采用驼峰式命名法(camelCase),就是,单词一个接一个,除了第一个单词,其他的每个单词都以大写字母开头......
  • 【C++ Primer Plus习题】14.3
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include"queuetp.h"usingnamespacestd;intmain(){ Queue......
  • SRS流媒体服务器从入门到精通(其一,环境搭建)
    欢迎诸位来阅读在下的博文~在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力!江山如画,客心如若,欢迎到访,一展风采文章目录一、SRS简介二、SRS的应用场景三、环境搭建四、推流和拉流使用ffmepg推流和拉流使用OBS推流(推荐)五、补充一、SR......
  • 【Python篇】matplotlib超详细教程-由入门到精通(下篇)
    文章目录前言第六部分:保存与导出图表6.1保存为图片文件示例:保存图表为PNG文件解释:关键点:6.2保存为高分辨率图片示例:保存为高分辨率图片解释:6.3保存为不同文件格式示例:保存为不同文件格式解释:6.4调整图表的保存尺寸示例:设置图片尺寸并保存解释:6.5解决中文乱码......
  • Unity碰撞入门笔记
    Collider和Collider碰撞条件layer间可碰撞。其中之一为刚体。碰撞函数进入碰撞:OnCollisionEnter(Collisioninfo)碰撞中:OnCollisionStay(Collisioninfo)碰撞离开:OnCollisionExit(Collisioninfo)trigger物体作为trigger将没有碰撞,作为触发器使用。(例如到达点位刷怪)进......