- C++語言程序設計
- 千鋒教育高教產品研發部編著
- 858字
- 2019-07-30 17:37:45
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,因此程序編譯失敗。
- Google Flutter Mobile Development Quick Start Guide
- Node.js 10實戰
- Microsoft Dynamics 365 Extensions Cookbook
- R語言編程指南
- Mastering Ubuntu Server
- Visual Basic程序設計教程
- FPGA嵌入式項目開發實戰
- Node.js區塊鏈開發
- Mastering Object:Oriented Python(Second Edition)
- 例解Python:Python編程快速入門踐行指南
- MongoDB Cookbook
- ANSYS FLUENT 16.0超級學習手冊
- 輕松學Scratch 3.0 少兒編程(全彩)
- 程序員的英語
- Getting Started with Windows Server Security