命名空间:
1.命名空间其实就是由用户自定义的范围,同一个命名空间里的东西只要在这个命名空间有独一无二的名字就行了。因此,如果某个程序有许多不同的头文件或已编译文件,它们又各自声明了许多的东西,命名空间可以为它们提供保护。
2.创建命名空间:先写出关键字namespace,再写出这个命名空间的名字,然后把这个命名空间里的东西全部括在一对花括号里就行了。例:
namespace{
//全部东西
}
在末尾不用加分号。
3.如果某个东西是在命名空间里定义的,程序将不能立刻使用它。这正是命名空间的全部意义所在:把东西放在它们自己的小盒子里,不让它们与可能有着相同名字的其他东西发生冲突。
4.想要访问在某个命名空间里定义的东西,有三种方法可供选择:
- std::cout<<”I love fishc.com”;(属于std作用域的cout)
- 使用using指令:using namespace std;
执行这条语句后,在std命名空间里定义的所有东西就都可以使用,我们就可以像下面直接使用:
cout<<”I love fishc.com!”;
3.用一个using指令只把你需要的特定命名从命名空间提取到全局作用域:
using std::cout;
cout <<”I love fishc.com”;
注:using指令的出现位置决定着从命名空间里提取出来的东西在哪个作用域内使用。如果你把它放在所有函数声明的前面,它将拥有全局性,如果你把它放在某个函数里,那么它将只在这个函数里可以使用。
5.有了#include<iostream>为什么还要using namespace std?
答:在C++引入名字空间的含义之前,都是用#include<iostream.h>这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C++引入了名字空间的概念后,把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用一套新的头文件,这套头文件的文件名后不加.h扩展名,如iostream、string等等,并且把原来C标准库的头文件也重新命名,如原来的string.h 就改成cstring(就是把.h去掉,前面加上字母c),所以头文件包含的写法也就变成了#include
<iostream>。
6.在声明一个命名空间时,花括弧内不仅可以包含变量,而且还可以包含以下类型:变量(可以带有初始化)、常量、函数(可以是定义或声明)、结构体、类、模板、命名空间(命名空间可以嵌套定义)。
7.还可以给命名空间取别名:
namespace Television
{...}
namespace Tv=Television;
则Tv就是命名空间Television的别名,在以后用到Television的地方都可以用Tv进行替换。
8、无名的命名空间
例:
namespace
{
void fun();
}
由于没有名字,所以其它文件无法引用,它只能在本文件的作用域内有效,它的作用域使重无名命名空间声明开始到本文件结束。在本文件使用无名命名空间成员时不必用命名空间限定。其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其它文件引用