C++命名空间详解

目录

听说点赞的人会有好运哦!

听说点赞的人会有好运哦!

听说点赞的人会有好运哦!

C++的由来:

C语言的命名缺陷:

什么是命名空间?

命名空间的访问方式:

1、指定访问

2、展开命名空间(慎用)

相关知识:


C++的由来:

C++原来本质上是在C的基础上补充的语法,去补充C的缺陷
由此而引出了一系列的语法和新的东西
后来发展到一定的程度,就自成体系
新晋成为一个新的语言
但是,因为是从C语言的基础上中衍生出来的
所以,就叫做C Plus Plus,即C++

C语言的命名缺陷:

C有一个明显的缺陷,就是命名的问题
什么命名问题?

例如,我们有一个头文件,#include<stdlib.h>
其中有一个函数叫做rand
那么现在我们要定义一个函数,函数名也叫做rand
此时,就会出问题


为什么?
因为,C程序在运行之前要进行编译
也就是头文件会展开,即把头文件的代码展开,类似于拷贝到当前项目
那么头文件展开的代码中已经有了一个函数叫做rand
后面我们又定义了一个命名为rand
就会出现重定义的问题
同时,不仅仅是这个场景下
再例如,不同的程序员,在写一个项目的时候,有可能会写同一个函名。
这个时候就会出问题,到底用谁的?你改还是我改?
那怎么办?
那就是,用命名空间

什么是命名空间?


要理解命名空间首先要理解代码运行的机制
在代码运行之前,首先会进行编译链接
首先是头文件展开
然后再到main函数
main函数内的变量和函数,首先会到局部域去找
局部域找不到就会到全局域找
什么是域?
全局域,你暂时可以理解为当前项目下的所有代码空间
局部域,相应的就是当下函数的作用域空间(命名空间其实也是一个局部域)
上面我们说过,一个域可以定义同一个变量,但是在不同的域却不可以定义,会出现重定义的问题
所以,如果要定义相同的变量名
就可以使用命名空间
命名空间就是一个域
在全局域中单独开出来的一个域,内部封装你要定义的变量、结构体、函数

那么,这个命名空间域就会独立于全局域、局部域之外
你要访问,就可以指定访问
例如,你在某个命名空间也定义了一个rand函数
要在mian函数调用rand函数
这个时候可以指定访问的是该命名空间的rand函数
而不是全局域中由头文件展开的那个rand函数
这样,就解决了命名冲突的问题

命名空间解决的是命名冲突的问题,什么冲突?库和我们自定义命名的冲突

命名空间的访问方式:


1、指定访问

namespace :: 域中的某值


2、展开命名空间(慎用)


注意,因为命名空间是在全局域中圈出一块,所以,展开以后,其范畴依旧属于全局域
在函数的调用中,依旧要先局部在全局

相关知识:

::域作用限定符
//左边为空,默认为访问全局变量

<<:流插入、左移操作符(二进制左移一位,相当于*2)
当和cout在一起时,就是另外的操作符,流插入,二者并不冲突

cout可以自当识别数据类型
endl可以视为\n,即换行符号//endline

cin >> i >> ch;
//流提取符、右移 操作符(二进制右移一位,相当于/2)

%.2lf  double留小数点后2位
%.3f  float留小数点后3位


 

  • 56
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十5画生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值