码迷,mamicode.com
首页 > 其他好文 > 详细

Namespaces命名空间

时间:2015-05-27 22:42:48      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

 

  1. 命名空间的定义
     1         namespace cplusplus_primer{
     2                         class Sales_item{/*.....*/};
     3                         Sales_item operator+(const Sales_item&,const Sales_item&);
     4                         class Query{
     5                                      public:
     6                                         Query(const std::string&);
     7                                         std::ostream &display(std::ostream&) const;
     8                                         //...
     9                          };
    10                       class Query_base{/*.....*/};
    11        }

    注:命名空间作用域不能以分号结尾

  2. 命名空间可以是不连续的
    命名空间可以在几个部分中定义。命名空间由它的分离定义部分的总和构成,命名空间是累积的。一个命名空间的分离部分可以分散在多个文件中,在不同文本文件中的命名空间定义也是累积的。

  3. 接口和实现的分离
    命名空间定义可以不连续意味着,可以用分离的接口文件和实现文件构成命名空间,因此可以用与管理自己的类和函数定义相同的方法来组织命名空间:
    1. 定义类的命名空间成员,以及作为类接口的一部分的函数声明与对象声明,可以放在头文件中,使用命名空间成员的文件可以包含这些头文件。
    2. 命名空间成员的定义可以放在单独的源文件中。

  4. 全局命名空间
    定义在全局作用域的名字(在任意类、函数或命名空间外部声明的名字)是定义在全局命名空间global namespace)中的。全局命名空间是隐式声明的,存在于每个程序中。在全局作用域定义实体的每个文件将那些名字加到全局命名空间。

  5. 嵌套命名空间
    例:
     1 namespace std{
     2         namespace rel_ops{
     3                      template<class T>
     4                      inline bool operator != ( const T& x , const T& y)
     5                      {
     6                         return !(x == y);
     7                      }
     8 
     9                      template<class T>
    10                      inline bool operator > ( const T& x , const T& y)
    11                      {
    12                         return y < x;
    13                      }
    14 
    15                      template<class T>
    16                      inline bool operator <= ( const T& x , const T& y)
    17                      {
    18                         return !(y < x);
    19                      }
    20 
    21                      template<class T>
    22                      inline bool operator >= ( const T& x , const T& y)
    23                      {
    24                         return !(x < y);
    25                      }
    26                 }
    27          }

    只需定义<和==操作符,就可以使用!=,>,<=,>=等四个比较操作符。另外还需要注意两点:

    #include <utility>  //上述命名空间定义于该文件
    using namespace std::rel_ops; //using 指令

  6. 未命名的命名空间
    未命名的命名空间以关键字namespace开头,接在关键字namespace后面的是由花括号定界的声明块。
    注:未命名的命名空间与其他命名空间不同,未命名的命名空间的定义局部于特定文件,从不跨越多个文本文件。每个文件有自己的未命名的命名空间。
    未命名的命名空间中定义的名字可直接使用。不能使用作用域操作符来引用未命名的命名空间的成员。
    未命名的命名空间中定义 的名字只在包含该命名空间的文件中可见。如果另一文件包含一个未命名的命名空间,两个命名空间不相关。
    注:在标准C++中引入命名空间之前,程序必须将名字声明为static,使它们局部于一个文件。文件中静态声明的使用从C语言继承而来,在C语言中,声明为static的局部实体在声明它的文件之外不可见。C++不赞成文件静态声明。不赞成的特征是在未来版本中可能不支持的特征。应该避免文件静态而使用未命名的命名空间代替。

  7. using 声明
    例:
    using std::map;
    using std::pair;
    using std::size_t;
  8. using 声明的作用域
    从using 声明点开始,直到包含该using声明的作用域的末尾,名字都是可见的。
  9. 命名空间别名
    可用命名空间别名(namespace alias)将较短的同义词与命名空间名字相关联。
    例如:
    namespace cplusplus_primer{/*...*/}
    可以像下面这样与较短的同义词相关联:
    namespace primer = cplusplus_primer;
  10. using 指示
    using namespace std;





Namespaces命名空间

标签:

原文地址:http://www.cnblogs.com/codetravel/p/4534510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!