| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 关于c++的namespace,你真的了解吗?真的会用吗? -> 正文阅读 |
|
[C++知识库]关于c++的namespace,你真的了解吗?真的会用吗? |
据我了解,很多学校在学习c++的时候,老师会让学生死记一条语句,那就是 using?namespace?std; 那么你真的了解它吗? (1)命名空间 namespace是一个命名空间。在讲述命名空间之前先了解为什么c++之父要创造这个功能。 在一个巨大的项目面前,很难保证每一个的协调一致,如果张三用了某一个变量,李四又不知道张三用了这个变量,那么这会导致命名重复。为了解决这个问题,就有了命名空间这个概念。 再讲一句,我们有一些函数,比如printf函数,这些函数是编写出来的,只是编写者取了这个printf当做函数的名字而已,所以我们定义变量的时候才不能使用printf等会产生争议的名字。 如果我们真的想使用的话,c++的命名空间遍给了我们解决方法----使用命名空间。
首先毫无疑问,这个是不可能的 如果有的老铁就是想用printf的话,我们此时就可以使用命名空间了。 首先:命名空间是全局的,必须写在main函数外面
这样的话是可以把1打印出来的,接下来详细讲一下: 这个lxy的位置是我自己命名的,代表这个是我自己的命名空间,当然这里你可以任意的命名。 这个namespace是一个域,跟结构体不一样,结构体那个是声明,这个域就像是隐身衣一样,让系统编译的时候不会去这个区里面读取,所以这个时候系统不会认为出现了两个printf,从而不会引发问题,但是当我们使用的时候我们可以写上lxy::也就是命名空间的名字加个域作用限定符让系统到命名空间查找这个变量。 这里要注意的是:命名空间是全局的,必须写在main外面,且这个东西仅仅就是加了一个外壳,这个外壳的作用是让编译器编译的时候不在这个空间里面作文章。所以里面该怎么写就怎么写,比如可以写结构体,可以写函数等等。相当于是你在main外面写了一些东西,但是加上namespace加个隐身而已。 但是外面要牢记,这个东西是一个隐身衣,就可以应对各种情况,在lxy::之前这个隐身衣一直在隐身。 下面列举一些例子:
函数也一样的:
但是如果我把函数实现写在外面,里面写函数声明呢?因为隐身衣的缘故,相当于你没有写函数声明,如果你的函数定义写在main上面的话,这样也可以。(同一个cpp文件)
请注意,这个时候你不可以写lxy::了,因为如果你这么写的话系统会优先的马上去lxy的命名空间查找,发现只有函数定义哦,所以肯定是打印不出来的。 把本代码函数定义移到其他cpp文件或者main下面的话,也是无法打印的。 我们等会讲完之后会专门把结构体提出来讲。 注意:1.namespace可以嵌套 2.可以在不同的地方使用多次,比如不同的cpp文件中。其中命名空间名字一样的空间会被编译器整合在一起,所以你可以在一个源文件里面写函数声明,另一个里面写函数定义。这是没问题的。 ?(2)命名空间的使用 1.嵌套命名空间的使用(我这里可以使用rand这个函数名作为变量因为我隐身了)
2.如果你不想写lxy::这样复杂的东西可以解除隐身,但是这个时候你已经解除了哦,相当于没有隐身了。
这样解放的是整个命名空间,你也可以只解放一个变量
。 那么回到标题的问题,你们知道为什么要加上这句话了吗? 因为c++的函数名全部定义在std这个命名空间里面。如果不加这句话你加上std::也是一样可以使用库函数的。不过你就不能定义跟函数重名的变量了。 关于结构体提一句。
这里是结构体变量名直接定义了的,直接按照上面的写。
此时写lxy::yzza是直接错误的,编译器直接报错
直接写lxy::yzza。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:57:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |