c
+
+
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?/p>
?
s
t
d
1
、命名空?/p>
std
C++
标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突
的问题。有了命名空间的概念?/p>
标识符就被限制在特定的范?/p>
(
函数
)
?/p>
,不会引起命名冲
突。最典型的例子就?/p>
std
命名空间
?/p>
C++
标准库中所有标识符都包含在该命名空间中
?/p>
如果确信在程序中
引用某个或者某些程序库不会引起命名冲突
(即库中的标识符不会
在程序中代表其他函数名称?/p>
,那么可以通过
using
操作符来简化对程序库中标识符(?/p>
常时函数)的使用,例如:
usingnamespacestd;
那么就可以不用在标识符在前缀
std::
来使
?/p>
C++
标准库库中的函数了?/p>
<iostream>
?/p>
<iostream.h>
是不一样,前者没有后缀,实际上,在你的编译?/p>
include
文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后
缀?/p>
.h
的头文件
c++
标准已经明确提出不支持了,早些的实现将标准库功能定义在全局?/p>
间里?/p>
声明在带
.h
后缀的头文件里,
c++
标准为了?/p>
C
区别开?/p>
也为了正确使用命名空间,
规定头文件不使用后缀
.h
。因此,当使?/p>
<iostream.h>
时,相当于在
c
中调用库函数,使
用的是全局命名空间,也就是早期?/p>
c++
实现;当使用
<iostream>
的时候,该头文件没有
定义全局命名空间,必须使?/p>
namespacestd
;这样才能正确使?/p>
cout
。?/p>
C
++标准程序库中的所有标识符都被定义于一个名?/p>
std
?/p>
namespace
中?/p>
由于
namespace
的概念,
使用
C
++标准程序库的任何标识符时,可以有三种选择?/p>
1
、直接指定标识符。例?/p>
std::ostream
而不?/p>
ostream
。完整语句如下:
std::cout<<std::hex<<3.4<<std::endl;
2
、使?/p>
using
关键字?/p>
usingstd::cout;
usingstd::endl;
以上程序可以写成
cout<<std::hex<<3.4<<endl;
3
、最方便的就是使?/p>
usingnamespacestd;
例如?/p>
#include<iostream>
#include<sstream>
#include<string>
usingnamespacestd;
这样命名空间
std
内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语?/p>
可以如下?/p>
:
cout<<hex<<3.4<<endl;