你真的懂C++中的namespace用法

 更新时间:2021年06月16日 14:24:45   作者:赚钱养个小智障- ̗̀(๑ᵔ⌔ᵔ๑)  
命名空间(namespace)为防止名字冲突提供了更加可控的机制,命名空间分割了全局命名空间,其中每个命名空间是一个作用域,今天通过本文给大家分享C++中namespace用法,感兴趣的朋友一起看看吧

namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace是对全局作用域的细分。

说白了namespace是怕变量冲突而出现的一种界限,不同的namespace好比不同的国家,而其中的变量相当于政府机关,而他们都是相互独立的!

using namespace std

using namespace std简要意思就是使用标准库,想知道更清楚的请继续往下看

using namespace std 的意思是:

using 和namespace都是C++的关键词。
std 是标准程序库所驻之命名空间(namespace)的名称。

  • 如果使用Boost的库 ,那就写 using namespace boost
  • 如果使用C++标准库 那就写 using namespace std

就是暴露std这个名字空间,你就可以调用std这个名字空间下的东西,包含在这个命名空间的所有类还有函数都可以使用了

一般的名字空间用法可以 这样使用:

namespace sdm  
  {  
            int   temp;  
            ......  
  }   

那么你在一个文件中有三种用法:

using namespace sdm;
然后你就可以使用变量temp:
temp=9;
还可以使用sdm中的其他每一个成员。using sdm::temp;
在这个文件中只能使用sdm中的temp这个变量。

你在使用时直接使用sdm::temp:
cout<<sdm::temp<<endl;
使用其它的成员也这样调用。

using namespace 就是怎么把一堆代码归在一起,把它们纳入一个space(空间);然后使用它们的时候,先要声明使用它所在的这个空间

例如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,才不会叫错人

namespace 就是一个名字的空间。是为了避免名字冲突而使用的。在不同的空间里可以使用同一个名字而不会引起名字冲突。

<iostream>和<iostream.h>

  • <iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。
  • 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
  • 因此,在使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使 用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

namespace

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

std::cout << std::hex << 3.4 << std::endl;

使用using关键字。

using std::cout;
using std::endl;

以上程序可以写成

cout << std::hex << 3.4 << endl;

最方便的就是使用using namespace std

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

cout << hex << 3.4 << endl;

因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准 库中的一切都被放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下 的。

所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。

命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"

以上就是你真的懂C++中的namespace用法的详细内容,更多关于C++中namespace用法的资料请关注脚本之家其它相关文章!

相关文章

  • C语言深入讲解内存操作问题

    C语言深入讲解内存操作问题

    程序运行的目的是为了得到特定的结果,计算机本质上是用于计算的,既然是用于计算,就需要参与计算的数据,那这些数据就存储在内存中,计算之前参与运算的数据以及运算之后得到的数据,都存储在内存中,所以对内存操作的掌握就尤为重要,下面我们一起来看看
    2022-04-04
  • Java C++题解leetcode1598文件夹操作日志搜集器

    Java C++题解leetcode1598文件夹操作日志搜集器

    这篇文章主要为大家介绍了Java C++题解leetcode1598文件夹操作日志搜集器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 70行C语言代码实现贪吃蛇

    70行C语言代码实现贪吃蛇

    这篇文章主要为大家详细介绍了70行C语言代码实现贪吃蛇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C++使用tinyxml库处理XML文件

    C++使用tinyxml库处理XML文件

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树,本文为大家介绍的是使用tinyxml库处理XML文件,需要的可以参考一下
    2023-07-07
  • 动态数组C++实现方法(分享)

    动态数组C++实现方法(分享)

    下面小编就为大家带来一篇动态数组C++实现方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C++内存管理详解使用方式

    C++内存管理详解使用方式

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能更大的自由,C++菜鸟的收获则是一遍—遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,要想成为C++高手,内存管理这关是必须过的
    2022-04-04
  • C++深入探究引用的本质与意义

    C++深入探究引用的本质与意义

    引用是C++一个很重要的特性,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价,这篇文章主要给大家总结介绍了C++中引用的相关知识点,需要的朋友可以参考下
    2022-04-04
  • Qt5连接并操作PostgreSQL数据库的实现示例

    Qt5连接并操作PostgreSQL数据库的实现示例

    本文主要介绍了Qt5连接并操作PostgreSQL数据库的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • C语言猜凶手及类似题目的实现示例

    C语言猜凶手及类似题目的实现示例

    本文主要介绍了C语言猜凶手及类似题目的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 解析如何利用switch语句进行字符统计

    解析如何利用switch语句进行字符统计

    本篇文章是对如何利用switch语句进行字符统计的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论