1、命名空间std
C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围呢,不会引起命名冲突。最典型的例子就是std命名控件,C++标准库中所有标识符都包含在该命名空间中。
如果确信在程序中引用某个或者某些程序库不会引起命名冲突,那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:
using namespace std;
那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。
2、头文件的命名和格式
C++标准引入的std命名空间并不向后兼容老的c++标准库。老的C++标准库的头文件中声明的标识符时全局范围的,不需要使用std命名空间限定就可 以使用。那么为了区分在标准化进程中的这种变化,C++新的标准库启用了新的头文件命名格式。这样就允许程序员通过包含不同格式的头文件来使用不同的 c++标准库。
新的C++标准库的头文件不再包含扩展名(.h, .hpp, .hxx等),形式如下:
#include <iostream>
#include <string>
这种新标准可以同样涵盖到C标准库,C标准库的头文件现在可以这样引用:
#include <cstdlib> //was: <stdlib.h>
#include <cstring> //was: <string.h>
》》》C++std命名空间详解
这种新的命名方式的便利之处就在于可以方便地区分老的C标准库中的头文件和新的C++标准库中的头文件。比如C标准库中和C++标准库中原先都有一个<string.h>的头文件,如果同时使用的话,会很不方便。现在就不会存在这样的问题了,形式如下:
#include <string> //C++ stirng class
#include <cstring> //C char* functions
[注意]:这种新的命名标准并不是意味着在文件系统中标准库的头文件没有扩展名,标准库的头文件在实际的文件系统中可以有扩展名,也可以没有扩展 名,这取决于不同的C++系统include语句的实现。但是在实践中,大部分的C++系统的include语句就是简单地到文件系统中查找相同名称的头 文件,然后加载它,所以大部分c++系统的标准库头文件就是直接没有扩展名。但是,这种规则仅仅应用在标准库的头文件中,通常来说对于程序员自己定义的头 文件,还是加上特定的扩展名比较好。
当然,为了兼容性,原先C标准库的头文件还可以使用,诸如:
#include <stdlib.h>
这种情况下,所对应的标识符(变量或这函数)同时在全局范围和std命名空间中声明。
而对于C++标准库的老的头文件格式的使用,诸如:
#include <iostream.h>
在现有C++标准中没有说明,因此在理论上不应该被支持了。但是在实际中,一些C++系统的厂商实现中却提供了老的头文件格式,是为了向后兼容行。那么在 实际使用中,程序员应该根据自己的情况选择一种情况来使用,尽量使用新标准的格式,但如果未了兼容性一定要使用老的文件格式,也不是不可以。