命名空间
命名空间解决的是命名冲突的问题,解决的是什么命名冲突问题?程序员与库之间的命名冲突,在协作写项目时候,程序员与程序员之间的命名冲突。
命名空间的定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。例如:
namespace List//List是命名空间的名字,一般开发中是用项目名字做命名空间名。
{// 命名空间中可以定义变量/函数/类型struct QNode{int val;struct QNode* next;struct QNode* prev;};void Init(struct QNode* phead);void PushBack(struct QNode* phead);
}
注意:
- 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
- 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
命名空间使用
命名空间的使用有三种方式:
- 加命名空间名称及作用域限定符
#include<stdio.h>int x = 10;int main()
{int x = 1;printf("hello word\n");printf("%d\n", x);printf("%d\n",::x);//::域作用限定符
}
其中,域分为:局部域、全局域、命名空间域、类域
而::name
用于类型名称(类、类成员、成员函数、变量等)前,表示作用域为全局命名空间,在这段代码中::x
是全局域的变量x。
- 使用using namespace 命名空间名称 引入
#include<iostream>using namespace std;//std是所有c++库命名空间int main()
{cout << "hello wold" << endl;return 0;
}
拿上述代码来说,当不加using namespace std;
这一句时,想要调用cout就需要写成std::cout
了。