1 命名空間介紹
使用命名空間的目的是對識別符號的名稱進行本地化,以避免命名衝突。下面是乙個簡單的命名空間的例子:
namespace mynames
這裡有兩個整型變數ival1和ival2被定義為mynames 命名空間的組成部分。
2 命名空間的成員
命名空間的乙個例子就是std,它是c++定義標準庫的命名空間。為使用cout 流物件,你必需告訴編譯器cout 已存在於std 名字空間中。為達到上述目的可以指定名字空間的名稱和作用域限定操作符(::)作為cout 識別符號的字首。如下所示:
#include int main()
通過使用cout 物件將流文字輸出到螢幕上來顯示簡訊息。注意std 名字空間是如何出現在cout 物件名稱前面的。
3 using namespace 語句
使用已在命名空間中定義的識別符號的另一種方法是將using namespace 語句把需要使用到的命名空間包含進來,例如:
#include using namespace std;
int main()
不僅cout 識別符號不再需要std 字首,而且在std 命名空間定義的其他任何識別符號都是如此。下面示例顯示了使用using
namespace 語句可能遇到的問題:
#include namespace mynames
namespace myothernames
using namespace std;
using namespace nynames;
using namespace nyothernames;
int main()
當試圖編譯程式時,大多數均會提示相應的出錯資訊。因為在語句ival1=100中,編譯器並不知道程式所指的是ival1的哪種版本。是在mynames 中定義的ival1,還是在myothernames 定義的ival1呢?編譯器並沒有辦法識別。為了避免出現這種型別的問題,應該將程式改寫如下,程式將會正確編譯和執行:
#include namespace mynames
namespace myothernames
int main()
4 定義命名空間
乙個命名空間可以包含多種型別的識別符號,如下面所列:
1)變數名
2)常量名
3)函式名
4)結構名
5)類名
6)命名空間名
乙個命名空間可以在兩個地方被定義:在全域性範圍層次或者是在另乙個命名空間中被定義(這樣就形成乙個巢狀命名空間)。如下所示:
#include namespace nynames
long sub(long i, long j)
} int main()
5 巢狀命名空間
命名空間可以在其他命名空間中被定義。在這種情況下,僅僅通過使用外部的命名空間作為字首,乙個程式僅可以引用外部命名空間中定義的識別符號。要想引用內部命名空間定義的識別符號,需要使用外部和內部命名空間名稱作為字首。
#include namespace myoutnames
} int main()
注意:
不能在命名空間的定義中宣告(另乙個巢狀的)子命名空間,只能在命名空間中定義子命名空間。
也不能直接使用「命名空間名::成員名 ……」的方式,為命名空間新增新成員,而必須在命名空間的定義中新增新成員的宣告。
6 無名命名空間
儘管給定命名空間的名稱是有益的,但你可以通過在定義中省略命名空間的名稱而簡單地宣告無名命名字空間,例如:
namespace
事實上,在無名命名空間中定義的識別符號被設定為全域性的命名空間,這幾乎徹底破壞了命名空間設定的最初目的。基於這個原因,無名命名空間並未被廣泛應用。
7 命名空間的別名
可以給命名空間取別名,它是已定義的命名空間的可替換的名稱。通過將別名指定給當前的命名空間的名稱,你可以簡單地建立乙個命名空間的別名。例如:
#include namespace mynames
namespace myalias = mynames;
int main()
8 命名空間綜合舉例
通過上面的學習我們了解了什麼是命名空間以及命名空間的用途,也舉了大量的例子說
明了命名空間的使用;但以上我們都是以單檔案的形式說明命名空間的,然而我們知道c++
程式是由標頭檔案和原始檔組成的;例如我想在標頭檔案中定義了乙個命名空間,並且在命名空間
中定義了乙個類,那麼如何在原始檔中實現這個類呢?
#ifndef test_h
#define test_h
namespace mynames ;
}#endif
#include #include " test7.h "
namespace mynames
void testclass::printval()
}
#include #include " test7.h "
int main()
spring p命名空間 c命名空間
p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...
C 命名空間,也有叫命名空間
在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...