命名空间
为什么会有命名空间?
解决C语言中命名冲突的问题。
(std是所有c++库的命名空间)
解决方法:
采用域作用限定符(::) :指定编译器搜索的位置。
编译器默认的搜索顺序:先局部再全局。
命名空间域
大体有4种域:全局域、局部域、命名空间域、类域。
命名空间域的特点:
1.不会影响生命周期。
2.只能定义在全局,具有隔离作用。
3.当函数命名相同时会将两个域合并。
命名空间的三种使用方法
(展开:开放访问限权)
1.命名空间 + ::
2.单独展开一个 using + 命名空间 + :: + 所需要使用的作用符
3.全展开 using namespace 命名空间
特:命名空间内可以随意套娃。
缺省参数
缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。分类和特性
1.半缺省参数
特点:缺省参数从右往左依次序给,不能间隔和跳跃。
2.全缺省参数
特点:传参的顺序从左往右依次,不能跳跃。
注意:缺省值必须是常量或者全局变量
特别:缺省参数不能在函数声明(.h文件)和定义中同时出现.给缺省值在声明中给(.h文件)。
函数重载
函数重载: 是函数的一种特殊情况, C++ 允许在 同一作用域中 声明几个功能类似 的同名函数 ,这 些同名函数的 形参列表 ( 参数个数 或 类型 或 类型顺序 ) 不同 ,常用来处理实现功能类似数据类型 不同的问题。构成重载的条件
1.参数的类型不同
2.参数的个数不同
3.参数的类型顺序不同
特别:如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办
法区分。C语言不支持函数重载的原因
在 C/C++ 中,一个程序要运行起来,需要经历以下几个 阶段 : 预处理、编译、汇编、链接 。 C语言在链接时,直接用函数名去找地址,有同名函数时区分不开,而c++中引入了函数名修饰规则,名字中引入参数类型。程序运行的几个阶段
预处理:展开头文件、宏替换、条件编译、去注释。
编译:检查语法并生成汇编代码。
汇编:把汇编代码转成二进制机器码。
链接:将上述生成文件合并生成可执行文件。
引用 &
引用不是定义一个新变量,而是给已存在的变量取一个别名。且编译器不会为引用变量开辟内存空
间,它和它引用的变量 共用同一块内存空间。特点
1.引用在定义时必须初始化。
2.一个变量可以有多个引用。
3.引用一旦引用一个实体,就不能引用其他实体。(不能改变指向)
使用场景
1.做函数参数
2.做返回值
注意:如果函数返回时,出了函数作用域,如果返回对象还在(没有还给系统),则可以使用引用,如果已经还给系统,则必须用传值返回。
传值和传引用的区别
传值返回:传递实参或者返回变量的一份临时的拷贝。
传引用返回:传递实参或者返回变量的别名。(效率更高)
引用和指针的区别
语法上:
引用:引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。
指针:指针是一个地址,需要开空间。
底层上:引用是按照指针方式实现的。(也是开了空间的!)
引用和指针在功能上是类似的,但是引用不能替代指针!!!
原因:引用定义后不能改变指向。 (引用不能实现链表,用指针实现)
标签:函数,知识,缺省,C++,空间,参数,引用,命名,入门 From: https://blog.csdn.net/2301_79224381/article/details/142107153