程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第17章 用於大型程序的工具(9)

第17章 用於大型程序的工具(9)

編輯:C++入門知識

上一篇:http://www.BkJia.com/kf/201201/115811.html

17.2.3 未命名的命名空間
命名空間可以使未命名的,未命名的命名空間(unnamed namespace)在定義時沒有給定名字。未命名的命名空間以關鍵字namespace開頭,接在關鍵字namespace後面的是由花括號定界的聲明塊。
未命名的命名空間與其他命名空間不同,未命名的命名空間的定義局部於特定文件,從不跨越多個文本文件。
未命名的命名空間可以在給定文件中不連續,但不能跨越文件,每個文件有自己的未命名的命名空間。
未命名的命名空間用於聲明局部於文件的實體。在未命名的命名空間中定義的變量在程序開始時創建,在程序結束之前一直存在。
未命名的命名空間中定義的名字可直接使用,畢竟沒有命名空間名字來限定它們。不能使用作用域操作符來引用未命名的命名空間的成員。
未命名的命名空間中定義的名字只在包含該命名空間的文件中可見。如果另一文件包含一個未命名的命名空間,兩個命名空間不相關。兩個命名空間可以定義相同的名字,而這些定義將引用不同的實體。
未命名的命名空間中定義的名字可以在定義該命名空間所在的作用域中找到。如果在文件的最外層作用域中定義未命名的命名空間,那麼,未命名的命名空間中的名字必須與全局作用域中定義的名字不同。
//Namespace2.h  
#ifndef NAMESPACE2_H  
#define NAMESPACE2_H  
namespace Andersoft 

    namespace Namespace2 
    { 
        class Class1; 
        class Class2; 
    } 
    namespace  
    { 
        class Class3; 
    } 

#endif 
//Namespace2.h
#ifndef NAMESPACE2_H
#define NAMESPACE2_H
namespace Andersoft
{
 namespace Namespace2
 {
  class Class1;
  class Class2;
 }
 namespace
 {
  class Class3;
 }
}
#endif//Class3.cpp  
#include "stdafx.h"  
#include "NameSpace2.h"  
 
 
class Andersoft::Class3{ 
    Andersoft::Namespace2::Class2 *c2; 
}; 
//Class3.cpp
#include "stdafx.h"
#include "NameSpace2.h"


class Andersoft::Class3{
 Andersoft::Namespace2::Class2 *c2;
};在標准C++中引入命名空間之前,程序必須將名字聲明為static,使它們局部與一個文件。文件中靜態聲明的使用從C語言繼承過來,在C語言中,聲明為static的局部實體在聲明它的文件之外不可見。
C++不贊成文件靜態聲明。不贊成的特征是在未來版本中可能不支持的特征。應該避免文件靜態而使用未命名的命名空間替代。

 

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved