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