c++学习笔记(二)

命名空间——namespace

一.基本介绍

命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象。

对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了。

为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

二.标准命名空间std

为了解决C++标准库中的标识符与程序中的全局标识符之间以及不同库中的标识符之间的同名冲突,应该将不同库的标识符在不同的命名空间中定义(或声明)。

标准C++库的所有的标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(如iostream)中函数、类、对象和类模板是在命名空间 std中定义的。

std是standard(标准)的缩写,表示这是存放标准库的有关内容的命名空间。

有的资料中会在前面加上std:,如
std::cout<<"OK."<<endl;
在有的C++书中可以看到这样的用法。但是在每个cout,cm以及其他在std中定义的标识符前面都用命名空间std作为限定,显然是很不方便的。

在大多数的C++程序中常用usmgnamespace语句对命名空间std进行声明,这样可以不必对每个命名空间成员一进行处理,在文件的开头加入以下 using namespace声明:
using namespace std;
这样,在std中定义和声明的所有标识符在本文件中都可以作为全局量来使用。

但是应当绝对保证在程序中不出现与命名空间std的成员同名的标识符,例如在程序中不能再定义一个名为cout的对象。

由于在命名空间std中定义的实体实在太多,有时程序设计人员也弄不请哪些标识符已在命名空间std中定义过,为减少出错机会,有的专业人员喜欢用若干个"using命名空间成员”声明来代替“using namespace命名空间”声明,

using Std::string;

using Std::cout;

using Std::cin;

为了减少在每一个程序中都要重复书写以亡的using声明,程序开发者往往把编写应用程序时经常会用到的命名空间std成员的usmg声明组成一个头文件,然后在程序中包含此头文件即可。

可以使用using namespace指令避免使用名称空间前置。该指令告诉编译器后续代码正在使用指定命名空间中的名称。

理解:在头文件后面我们一般会加上using namespace std;就是因为可能会出现变量或函数重名,如果不写这一行代码,我们就需要在每一个变量或函数前面打上std: 较为麻烦,所以引用了namespace。

三种使用

根据上面所介绍的,我们在打代码时可以对命名空间有三种使用。
1.直接指定标识符
例如std::iostream而不是iostream。完整语句如下:
std::cout<<std::hex<<3.4<<std::endl;
2.使用using关键字
加入using std::cout; using std::endl; using std::cin; 则前面语句可以写成如下代码:
cout << std ::hex << 3.4 << endl;
3.使用using namespace std
例如:

#include<......>
#include<......>
#include<......>
using namespace std;
cout << hex << 3.4 << endl;

个人认为,直接使用using namespace std 比较好,简洁容错高。

posted @ 2020-01-30 22:42  hqk111  阅读(114)  评论(0编辑  收藏  举报