namespace 的作用

using namespace std;
  这句代码的意思是:打开标准命名空间,即告诉编辑器我们将要使用名字空间std中的函数或者对象。

  using 顾名思义就是正在使用的意思。
  namespace 是指标识符的可见范围,它的引用是为了解决不同space中命名相同导致命名冲突的问题。使用using namespace …的引用可以让编译器准确的找到我们需要的函数或者对象,能有效的提高程序员写代码的效率,但这些都和性能无关,仅仅对程序员有利。
  std 是个名称空间标识符,C++标准库中的所有标识符都被定义在一个名为 std 的 namespace 中,所以我们要使用标准库中的函数或者对象都要用std::来限定。

一、<iostream>和<iostream.h>

  区别:格式不一样,前者没有后缀。实际上,在你自己编译器的include路径下,你可以看到这两个是两个不同的文件,而且打开后里面的代码也不同。后缀为 .h 的头文件C++标准以明确提出不支持了,C++标准为了与C区分开,也为了能够正确的使用命名空间,规定了头文件不适用后缀 .h 。因而

  1、当使用<iostream.h>时,相当于在 c 中调用库函数,使用的是全局命名空间,也就是早期的C++实现;

  2、当使用<iostream>时,该头文件没有定义全局命名空间,必须使用 namespace std ; 这样才能够正确的使用 cout ;

二、使用C++标准库中的标识符时的三种形式

  1、直接在标识符前加上命名空间 std : 例如 std :: cout << std :: hex << 3.1415 << std :: endl;(什么时候用什么时候打开std 中对象/函数,安全,较复杂)

  2、用 using 关键字指定部分标识符的命名空间:using std :: cout ; using std :: endl ; 那么1中的语句可以改写为 cout << std :: hex << 3.1415 << endl ;(提前打开需要使用的std 中对象/函数 ,安全,推荐)

  3、最方便的就是使用 using namespace std ; 让命名空间 std 内的所有标识符都有效 。好像把他声明成全局函数一样,这样上面的代码就可以写成 cout << hex << 3.1415 << endl 。(完全打开std 命名空间,简单但是不安全)

三、命名空间的定义

  namespace name { ... } ;

四、命名空间的使用

  测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
 
namespace namespaceA
{
    int a = 1 ;
    namespace namespaceD
    {
        int b = 3;
    }      
}
 
namespace namespaceB
{
    int a = 2 ;
    namespace namespaceC
    {
        int b = 4;
    }
}
 
int main()
{
    /*
    // 这样编译,会报错,因为 a 的命名空间不明确
    using namespace namespaceA; 
    using namespace namespaceB;
    cout << a << endl;
    */
     
    cout << namespaceA::a << endl;
    cout << namespaceB::a << endl;
     
    //namespace的定义可以嵌套,访问 namespaceC 中的 b 可以这样写
    using namespace namespaceB::namespaceC;
    cout << b << endl ;
}


原文链接:

https://blog.csdn.net/yeling0119/article/details/86181544

https://blog.csdn.net/ly_6699/article/details/88649415

posted @   KYZH  阅读(178)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示