【问题引入】
问题1:如何在不知道的情况下避免自己的代码与库函数或其他协调开发人员的代码产生命名冲突?
要知道在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,在我们不了解它们命名的情况下,取了一个同样的名字,这样可能会导致很多命名冲突。
问题2:许多C++教科书上在定义头文件#include<iostream>后还要定义一个using namespace std; 是在干什么,为什么要这样写呢?
iostream这个头文件中只有函数的声明,其实现全在命名空间std中,所以我们光引入头文件iostream还不行,还要引入命名空间std 或 引入命名空间std下的要使用的库对象/类型等。
问题3:为什么不使用<iostream.h> 而使用#include<iostream>和命名空间std?
早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h。
旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用 <iostream> + std 的方式。
1. 概念
1.1 是什么?
C++中命名空间是通过关键字namespace来组织全局变量的一种形式。
1.2 为什么?
现在可以回答问题引入中的第一个问题了:如何在不知道的情况下避免自己的代码与库函数或其他协调开发人员的代码产生命名冲突?要知道在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,在我们不了解它们命名的情况下,取了一个同样的名字,这样可能会导致很多命名冲突。我们可以使用命名空间来避免这个问题。
1.3 怎么用?
2. 创建命名空间
创建命名空间,需要使用到 namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
3. 命名空间的成员
- 其它命名空间(命名空间可以嵌套)
4. 命名空间的访问与展开
2.1 使用 ::(域作用限定符) 来访问命名空间的成员。
例如:lin::a (访问命名空间lin中的变量a)。
拓1:如果::前没有空间名,就是在访问全局变量(如何访问全局变量)
拓2:访问命名空间中的结构体就时,空间名在struct后
2.2 使用using namespace 空间名,展开命名空间,然后当全局变量用(不推荐使用)。
5. 命名空间的使用
6. 一个工程中的同名命名空间会合并
【总结】
————————END————————-
原文地址:https://blog.csdn.net/look_outs/article/details/127191130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48396.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!