Effective C++ (4) c++中的命名空间


现在来看看下面两个include:

    #include<iostream>     // 这个就是1998年标准化以后的标准头文件

    #include<iostream.h>       // 这个就是标准化以前的头文件

    更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。

    看看下面这两个头文件

    // 标准化后经过改造的C的标准库,所有的组件都放在了std中

    #include<cstdio>          

    // 标准化以前C++中的C标准库

    #include<stdio.h>

    // 在看看这个头文件C标准库下 基于char* 的字符处理函数库

    #include<string.h>

    // 在标准化以后他变成了这样

    #include<cstring>

    // 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class

    #include<string>

 

C++中的命名空间:

在 C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的 C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用 域。
MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名空间

 

使用 using 声明可以在不需要加前缀 namespace_name:: 的情况下访问命名空间中的名字。using 声明的形式如下:

     using namespace::name;
如:
using namespace std;
using std::cin;
 
另一个问题是避免重复引用:
头文件的包含,避免重复定义,命名空间的使用,用预处理器指令来控制代码块等等技巧。
// print.h
#ifndef PRINT_H
#define PRINT_H
#include <iostream>
#include <string>
using std::string;
namespace print1 {
    void print(const string& s);
}
namespace print2 {
    void print(const string& s);
}
#endif
原文地址:https://www.cnblogs.com/feisky/p/1586319.html