不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > 什么是命名空間_具體的范圍怎樣

什么是命名空間_具體的范圍怎樣

時(shí)間: 謝君787 分享

什么是命名空間_具體的范圍怎樣

  命名空間是用來(lái)組織和重用代碼的,那么你對(duì)命名空間了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于什么是命名空間的內(nèi)容,希望大家喜歡!

  命名空間的解析

  NameSpace(名字空間),之所以出來(lái)這樣一個(gè)東西,是因?yàn)槿祟惪捎玫膯卧~數(shù)太少,并且不同的人寫的程序不可能所有的變量都沒(méi)有重名現(xiàn)象,對(duì)于庫(kù)來(lái)說(shuō),這個(gè)問(wèn)題尤其嚴(yán)重,如果兩個(gè)人寫的庫(kù)文件中出現(xiàn)同名的變量或函數(shù)(不可避免),使用起來(lái)就有問(wèn)題了。為了解決這個(gè)問(wèn)題,引入了名字空間這個(gè)概念,通過(guò)使用 namespace xxx;你所使用的庫(kù)函數(shù)或變量就是在該名字空間中定義的,這樣一來(lái)就不會(huì)引起不必要的沖突了。

  通常來(lái)說(shuō),命名空間是唯一識(shí)別的一套名字,這樣當(dāng)對(duì)象來(lái)自不同的地方但是名字相同的時(shí)候就不會(huì)含糊不清了。使用擴(kuò)展標(biāo)記語(yǔ)言的時(shí)候,XML的命名空間是所有元素類別和屬性的集合。元素類別和屬性的名字是可以通過(guò)唯一XML命名空間來(lái)唯一。

  在XML里,任何元素類別或者屬性因此分為兩部分名字,一個(gè)是命名空間里的名字另一個(gè)是它的本地名。在XML里,命名空間通常是一個(gè)統(tǒng)一資源識(shí)別符(URI)的名字。而URI只當(dāng)名字用。主要目的是為了避免名字的沖突。

  命名空間的范圍

  所謂namespace,是指標(biāo)識(shí)符的各種可見(jiàn)范圍。C++標(biāo)準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。

  一 :<iostream>和<iostream.h>格式不一樣,前者沒(méi)有后綴,實(shí)際上,在你的編譯器include文件夾里面可以看到,二者是兩個(gè)文件,打開文件就會(huì)發(fā)現(xiàn),里面的代碼是不一樣的。后綴為.h的頭文件c++標(biāo)準(zhǔn)已經(jīng)明確提出不支持了,早些的實(shí)現(xiàn)將標(biāo)準(zhǔn)庫(kù)功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標(biāo)準(zhǔn)為了和C區(qū)別開,也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。 因此,當(dāng)使用<iostream.h>時(shí),相當(dāng)于在c中調(diào)用庫(kù)函數(shù),使用的是全局命名空間,也就是早期的c++實(shí)現(xiàn);當(dāng)使用<iostream>的時(shí)候,該頭文件沒(méi)有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。

  二: 由于namespace的概念,使用C++標(biāo)準(zhǔn)程序庫(kù)的任何標(biāo)識(shí)符時(shí),可以有三種選擇:

  1、直接指定標(biāo)識(shí)符。例如std::ostream而不是ostream。完整語(yǔ)句如下: std::cout << std::hex << 3.4 << std::endl;

  2、使用using關(guān)鍵字。 using std::cout; using std::endl; using std::cin; 以上程序可以寫成 cout << std::hex << 3.4 << endl;

  3、最方便的就是使用using namespace std; 例如: using namespace std;這樣命名空間std內(nèi)定義的所有標(biāo)識(shí)符都有效(曝光)。就好像它們被聲明為全局變量一樣。那么以上語(yǔ)句可以如下寫: cout <<hex << 3.4 << endl;因?yàn)闃?biāo)準(zhǔn)庫(kù)非常的龐大,所以程序員在選擇的類的名稱或函數(shù)名時(shí)就很有可能和標(biāo)準(zhǔn)庫(kù)中的某個(gè)名字相同。所以為了避免這種情況所造成的名字沖突,就把標(biāo)準(zhǔn)庫(kù)中的一切都被放在名字空間std中。但這又會(huì)帶來(lái)了一個(gè)新問(wèn)題。無(wú)數(shù)原有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫(kù)中的功能,他們都是在全局空間下的。所以就有了<iostream.h>和<iostream>等等這樣的頭文件,一個(gè)是為了兼容以前的C++代碼,一個(gè)是為了支持新的標(biāo)準(zhǔn)。命名空間std封裝的是標(biāo)準(zhǔn)程序庫(kù)的名稱,標(biāo)準(zhǔn)程序庫(kù)為了和以前的頭文件區(qū)別,一般不加".h"

  命名空間的分類

  在struts2中

  在struts2里,namespace是package里的一個(gè)屬性,用來(lái)標(biāo)記action的訪問(wèn)路徑。注意:只有package的namespace才能標(biāo)記路徑而不是name屬性。在struts2里,存在著一個(gè)是默認(rèn)namespace-"",若package不指定namespace,則package里的action就使用默認(rèn)namespace。若訪問(wèn)action時(shí)沒(méi)有指定namespace則struts2會(huì)先在根namespace-"/"里查找action,找不到再到默認(rèn)namespace里查找action。再找不到就會(huì)報(bào)錯(cuò),也就是說(shuō)struts2只會(huì)查找兩層namespace。

  在XML中

  命名空間提供避免元素命名沖突的方法。

  命名沖突

  在 XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)子集) 中,元素名稱是由開發(fā)者定義的,當(dāng)兩個(gè)不同的文檔使用相同的元素名時(shí),就會(huì)發(fā)生命名沖突。

  這個(gè) XML 文檔攜帶著某個(gè)表格中的信息:

  <table>

  <tr>

  <td>Apples</td>

  <td>Bananas</td>

  </tr>

  </table>

  這個(gè) XML 文檔攜帶有關(guān)桌子的信息(一件家具):

  <table>

  <name>African Coffee Table</name>

  <width>80</width>

  <length>120</length>

  </table>

  假如這兩個(gè) XML 文檔被一起使用,由于兩個(gè)文檔都包含帶有不同內(nèi)容和定義的 <table> 元素,就會(huì)發(fā)生命名沖突。

  XML 解析器無(wú)法確定如何處理這類沖突。

  使用前綴來(lái)避免命名沖突

  此文檔帶有某個(gè)表格中的信息:

  <h:table>

  <h:tr>

  <h:td>Apples</h:td>

  <h:td>Bananas</h:td>

  </h:tr>

  </h:table>

1681598