C++命名空间

By AverageJoeWang
 标签:

一.概述

是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开。

二.使用方法

1.第一种使用方法,先利用using声明,后直接使用

  • 定义匿名非匿名命名空间
namespace {
    int flag = 100;
}//匿名命名空间定义

namespace AverageJoe{
    bool false = false;
}
  • 声明命名空间,2种方法
using namespace std;//这种方法不是很推荐
using std::cout;//比较推荐这这个声明命名空间中的变量

2.第二种使用方法,直接利用命名空间作用域限定符访问成员

cout << "AverageJoe is " << AverageJoe::flag << std::endl;

3.例子

  • 以下例子编写2个不同名字的命名空间

  • 在不同的命名空间对一个量定义不同类型和初始化

  • 利用不同的命名空间使得相同名字的变量不会产生冲突

#include <iostream>
using std::cout;//第一种使用方法,先声明,后直接使用

namespace AverageJoe{
    int flag = 1;
}//end of namespace AverageJoe

namespace AverageJoeWang{
    bool flag = false;
}end of namespace AverageJoeWang

int main(int argc, char* argv[])
{
    if(AverageJoeWang::flag)
        cout << "Hello World" << std::endl;
        //第二种使用方法,直接利用**命名空间**加**作用域限定符**访问成员
    else
        cout << "AverageJoe is " << AverageJoe::flag << std::endl;
    return 0;
}

三.小结

  • 名称空间的作用域是全局的,但其可见域却并非如此,而且,不论使用限定符还是使用using声明语句,都要求名称空间可见,因此,名称空间同样要先定义、后使用

  • 名称空间中函数的定义和实现可以分开进行

  • 作用域限定符::、using声明机制和using编译机制是3种常用的扩展实体可见域的方式,使名称空间中的特定实体或全部实体在声明可见域内可用。

  • 名称空间内实体的访问规则和原来介绍的没有名称空间时的情况类似,名称空间还支持嵌套层次结构,在外部使用内层空间时,必须使用多重作用域限定符的形式。