官术网_书友最值得收藏!

2.6 命名空間

在使用變量時,需要注意命名沖突問題,C++語言引入命名空間來減少和避免命名沖突。例如,有兩個學生:一個叫小千,一個叫小鋒,他們各自擁有一本C++語言課本,為了區分這兩本C++語言課本,他們就在自己的課本封面寫上自己的名字。同理,如果在同一作用域中定義兩個相同數據類型的同名變量,則會出現重復定義的編譯錯誤。采用命名空間,就可以避免這種情況的發生。命名空間的定義格式如下所示:

namespace是定義命名空間的關鍵字,命名空間名稱可以用任意合法的標識符,在{}內聲明空間成員,在命名空間中聲明或定義的任何東西都局限于該命名空間內。

當命名空間外的作用域要使用空間內定義的標識符時,有以下3種方法:

(1)使用命名空間名稱加上域解析操作符“∷”來表明要使用的成員,其語法格式如下:

     命名空間名稱::成員;

(2)使用using關鍵字來表明整個命名空間,此時該命名空間中的所有成員都會被引入到當前范圍中,其語法格式如下:

     using namespace命名空間名稱;

(3)使用using關鍵字能使指定的命名空間中的指定成員在當前范圍中變為可見,其語法格式如下:

     using命名空間名稱::成員;

接下來演示命名空間的作用及使用方法,如例2-12所示。

例2-12

運行結果如圖2.23所示。

圖2.23 例2-12運行結果

在例2-12中,程序中有3個名為a的變量名,但它們的值都是不一樣的。第2行到第5行,定義了一個命名空間A,該命名空間中包含一個變量a,它的值為1;第6行到第9行,定義了一個命名空間B,該命名空間中包含一個變量a,它的值為2;第12行,在main函數中又定義了一個變量a,它的值為3。第13行演示了對3個同名變量的讀取,main函數中定義的a可以直接以變量名進行讀取,在命名空間中定義的變量名需要注明其所屬的命名空間。

假如讀者還是不理解命名空間的作用,可以嘗試將命名空間A和B中的變量名a釋放出來,然后再試著輸出變量a的值,如例2-13所示。

例2-13

該程序編譯后,出現一條錯誤信息:

     error:reference to  'a'is ambiguous.

上面的錯誤信息指出a引起了歧義,由于該程序第12行和第13行將命名空間A和B的所有成員都釋放出來,導致在第14行產生歧義,程序不知此處訪問哪個命名空間下的a,因此程序編譯失敗。

主站蜘蛛池模板: 东兴市| 江川县| 利辛县| 昌乐县| 明星| 武山县| 曲阳县| 徐闻县| 咸丰县| 南郑县| 石嘴山市| 怀远县| 资源县| 扶绥县| 武定县| 韶关市| 湘阴县| 绍兴县| 永和县| 南溪县| 常宁市| 蓝田县| 洛川县| 许昌市| 福建省| 长治县| 怀来县| 普安县| 望谟县| 安宁市| 青海省| 晋宁县| 齐河县| 邵阳市| 介休市| 和静县| 德兴市| 宁波市| 九龙城区| 宜丰县| 新野县|