命名空间、缺省参数、函数重载、extern C

1.命名空间

1.1什么是命名空间

c++中的类和库中有大量的关键字,那么我们定义变量的时候就很容易与这些系统关键字发生冲突,使用命名空间的目的就是为了避免与关键字发生冲突;

举个简单的例子,有人来学校找一个叫张三的人,广播出去后有非常多叫张三,这样就导致了混淆,不知道你要找谁。但是你如果加个前提,我要找4年级3班1组1号的张三,这样就不会发生冲突了;

同样,为了避免这种命名冲突,我们在c++中引入命名空间,在特定的作用域中进行寻找就不会发生冲突了。

1.2命名空间的定义

在这里插入图片描述

1.3命名空间的使用

由上述可知命空间的定义,那么我们怎么使用呢?接下来介绍命名空间的3种使用方法

1.命名空间名称以及作用域限定符
在这里插入图片描述

2.使用using将命名空间中成员引入
在这里插入图片描述

3.使用using namespace 命名空间名称引入
在这里插入图片描述

2.缺省参数

2.1什么是缺省参数

缺省参数是指,声明或定义函数的时候为函数的参数指定一个默认值,在调用该函数的时候,如果没有指定实参则采用该默认值,否则使用指定的实参

在这里插入图片描述

2.2缺省参数的分类

缺省参数分为全缺省参数和半缺省参数
半缺省参数必须从右往左依次给出,不能间隔给;

缺省参数不能在函数的命名和定义中同时出现,这是因为如果恰好两个位置给的值不一样,那么编译器就无法识别到底是使用哪个缺省值;

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

C语言不支持(编译器不支持)
在这里插入图片描述

3.函数重载

3.1什么是函数重载

函数重载是函数的一种特殊情况,C++允许在同一作用域内声明几个功能类似的同名函数,但是这些同名函数的形参列表(形参的个数或类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题;
在这里插入图片描述

3.2为什么C++支持函数重载C语言不支持

在可执行程序运行之前,需要经过预处理,编译,汇编,链接几个阶段;

在预处理阶段进行去注释,宏替换,头文件展开,条件编译等等,在编译阶段编译器将检查代码的规范性和语法,汇编阶段是生成机器可识别的二进制文件,在链接阶段才会用函数名(函数名即函数地址)去寻找对应的函数的实现;
在这里插入图片描述

4.extern C

有些时候我们在C++工程之中需要用将某些函数按照C的风格来进行编译,比如我们将C++项目打包成了一个动态库,在后续用C语言去调用这个动态库;

由上面函数重载可知,C++和C的函数编译出来后,C的函数名是没有被修饰的,C++的函数名会进行修饰,那么我们用C就调用不了C++风格编写的函数;

此时只要在函数前面加上extern C告诉编译器,将这个函数按照C语言规则来进行编译就可以解决函数名修饰规则不同的问题了;

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值