命名空間的一些特性 -开发者知识库

命名空間的一些特性 -开发者知识库,第1张

命名空間
在一個給定作用域中定義的每個名字在該作用域中必須是唯一的,對龐大、復雜的應用程序而言,這個要求可能難以滿足。這樣的應用程序的全局作用域中一般有許多名字定義。由獨立開發的庫構成的復雜程序更有可能遇到名字沖突--同樣的名字既可能在我們自己的代碼中使用,也可能在獨立供應商提供的代碼中使用。
庫傾向於定義許多全局名字--主要是模板名、類型名、或函數名。在使用來自多個供應商的庫編寫應用程序的時候,這些名字中有一些幾乎不可避免的會發生沖突,這種名字沖突問題稱為命名空間污染問題。
像其他名字一樣,命名空間的名字在定義該命名空間的作用域中必須是唯一的。命名空間可以在全局作用域或其他作用域內部定義,但不能在函數或類內部定義。
命名空間名字后面接着由花括號括住的一塊聲明和定義,可以在命名空間中放入可以出現在全局作用域的任意聲明:類、變量、函數、模板以及其他命名空間。
命名空間的特征:
1.每個命名空間是一個作用域
定義在命名空間中的實體稱為命名空間成員。像任意作用域的情況一樣,命名空間中的每個名字必須引用該命名空間中的唯一實體。因為不同命名空間引入不同作用 域,所以不同命名空間可以具有同名成員。
2.從命名空間外部使用命名空間成員
可以編寫using聲明來獲得對我們知道將經常使用的名字的直接訪問。
3.命名空間可以是不連續的
與其他作用域不同,命名空間可以在幾個部分中定義。命名空間由它的分離定義部分的總和構成,命名空間是累積的。一個命名空間的分離部分可以分散在多個文件 中,在不同文本文件中的命名空間定義也是累積的。
當然,名字只在聲明的文件中可見,這一常規限制繼續應用,所以,如果命名空間的一個部分需要定義在另一文件中的名字,仍然必須聲明該名字。
編寫命名空間定義:
namespace namespace_name
{
//declarations
}
既可以定義新的命名空間,也可以添加到現存命名空間中。如果名字namespace_name不是引用前面定義的命名空間,則用該名字創建新的命名空間,否則,這個定義 打開一個已存在的命名空間,並將這些新的聲明加到那個命名空間。
4.接口和實現的分離
命名空間定義可以不連續意味着,可以用分離的接口文件和實現文件構成命名空間,因此,可以用於管理自己的類和函數定義相同的方法來組織命名空間:
(1)定義類的命名空間成員,以及作為類接口的一部分的函數聲明與對象聲明,可以放在頭文件中,使用命名空間成員的文件可以包含這些頭文件。
(2)命名空間成員的定義可以放在單獨的源文件中。


最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复