目录

【问题引入】

1. 概念

2. 创建命名空间

3. 命名空间的成员

4. 命名空间的访问与展开

5. 命名空间的使用

6. 一个工程中的同名命名空间会合并

【总结】


问题引入

问题1:如何在不知道的情况下避免自己代码库函数或其他协调开发人员代码产生命名冲突

        要知道在C/C++中,变量函数和类都是大量存在的,这些变量函数和类的名称将都存在于全局作用域中,在我们不了解它们命名的情况下,取了一个同样的名字,这样可能会导致很多命名冲突

问题2:许多C++教科书上在定义头文件#include<iostream>后还要定义一个using namespace std; 是在干什么为什么要这样写呢?

        iostream这个头文件中只有函数声明其实现全在命名空间std中,所以我们引入头文件iostream还不行,还要引入命名空间std 或 引入命名空间std下的要使用的库对象/类型等。

问题3:为什么使用&lt;iostream.h&gt; 而使用#include<iostream&gt;和命名空间std

        早期标准库将所有功能全局域中实现声明在.h后缀头文件中,使用时只需包含对应文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h
        旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用 <iostream> + std方式


1. 概念

1.1 是什么

        C++中命名空间是通过关键字namespace组织全局变量的一种形式。


1.2 为什么

        防止命名冲突。(库、其他文件中的变量名

        现在可以回答问题引入中的第一个问题了:如何在不知道的情况下避免自己的代码库函数或其他协调开发人员代码产生命名冲突知道在C/C++中,变量函数和类都是大量存在的,这些变量函数和类的名称将都存在于全局作用域中,在我们不了解它们命名的情况下,取了一个同样的名字,这样可能会导致很多命名冲突。我们可以使用命名空间来避免这个问题


1.3 怎么用?

        使用关键字namespace创建命名空间,使用using展开,使用 :: 访问


2. 创建命名空间

        创建命名空间,需要使用到 namespace关键字,后面跟命名空间的名字然后一对{}即可,{}中即为命名空间的成员

        空间名不能和库中函数名冲突,除此之外可以随意命名,所以建议练习时使用自己名字的缩写,在开发项目加一前缀

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。


3. 命名空间的成员

        

  • 其它命名空间(命名空间可以嵌套

4. 命名空间的访问展开

2.1 使用 ::(作用限定) 来访问命名空间的成员
例如lin::a  (访问命名空间lin中的变量a)。              

        


拓1:如果::前没有空间名,就是在访问全局变量(如何访问全局变量)        
                
拓2:访问命名空间中的结构体就时,空间名在struct后        
        

2.2  使用using namespace 空间名,展开命名空间然后全局变量用(不推荐使用)。

        


5. 命名空间的使用

命名空间的使用有三种方式

  1. 使用 “using namespace 空间名” 展开命名空间。
    方式只推荐在日常练习中使用,不推荐在项目中使用。
    在项目中更推荐使用以下两种用法。(展开常用+指定访问)
  2. 展开常用
    使用using将指定空间中的指定成员引入。(usinstd::cin;)
  3. 指定访问:
    加命名空间名称作用域限定符。(std::cin)

6. 一个工程中的同名命名空间会合并


总结】 


————————END————————-

才疏学浅,谬误难免,欢迎各位批评指正。

原文地址:https://blog.csdn.net/look_outs/article/details/127191130

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48396.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注