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 { ... } ;

四、命名空间的使用

  测试:

#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 @ 2023-02-26 20:41  KYZH  阅读(149)  评论(0编辑  收藏  举报