C++程序中的許多元素都有用來(lái)表示它們的名稱(也稱為標(biāo)識(shí)符)。在C++程序中,可以命名的5種元素是: (1) 函數(shù)。函數(shù)是自包含的、可執(zhí)行代碼的命名塊。第8章將詳細(xì)討論如何定義函數(shù)。 (2) 變量。變量是內(nèi)存中的指定區(qū)域,用于存儲(chǔ)數(shù)據(jù)項(xiàng)。第2章將論述變量。 (3) 類型。類型是可以存儲(chǔ)的數(shù)據(jù)種類。例如類型int用于存儲(chǔ)整數(shù)。第2章和后續(xù)的章節(jié)將介紹類型,尤其是第11和12章。 (4) 標(biāo)簽。標(biāo)簽提供了表示特定語(yǔ)句的方式。它們很少使用,第4章將詳細(xì)介紹。 (5) 命名空間。命名空間是用一個(gè)集合名稱標(biāo)識(shí)程序中一組命名項(xiàng)的方式。這聽(tīng)起來(lái)可能讓人混淆,但不必?fù)?dān)心,稍后就介紹命名空間,第10章將詳細(xì)論述。 在大多數(shù)現(xiàn)代C++編譯器中,名稱只能包含大小寫(xiě)字母、下劃線和0~9的數(shù)字。ANSI標(biāo)準(zhǔn)還允許在名稱中包含通用字符集(Universal Character Set)(稍后介紹)中的字符,但一般不需要這項(xiàng)功能。 名稱必須由允許的字符組成,不要在名稱的中間加上空白字符(空格、制表符等),否則,編譯器就不會(huì)把該名稱看做是一個(gè)名稱,而是看做兩個(gè)名稱,從而導(dǎo)致處理不正確。另一個(gè)限制是名稱不能以數(shù)字開(kāi)頭。下面是一些合法的名稱例子: value2 Mephistopheles BettyMay Earth_weight PI 下面的名稱就不合法: 8Ball Mary-Ann Betty May Earth-weight 2PI 提示: 包含兩個(gè)下劃線的名稱,或者以下劃線開(kāi)頭,后跟一個(gè)大寫(xiě)字母的名稱,是C++標(biāo)準(zhǔn)庫(kù)的保留名稱,在程序中不應(yīng)使用這類名稱。編譯器不會(huì)檢查這類名稱,用戶只能在程序出錯(cuò)時(shí)發(fā)現(xiàn)有一個(gè)沖突的名稱。 我們將在使用名稱時(shí)進(jìn)一步討論它們,第2章討論變量時(shí)就開(kāi)始討論名稱。 命名空間 在上面的簡(jiǎn)單C++程序中,有一行代碼沒(méi)有解釋。為了理解這行代碼,需要知道什么是命名空間。為了說(shuō)明命名空間的含義,下面先討論名稱。上面C++程序中還沒(méi)有解釋的代碼行如下: using namespace std; 命名空間的名稱有點(diǎn)像姓氏。家庭中的每個(gè)成員都有自己的姓名,在大多數(shù)家庭中,每個(gè)家庭成員都有一個(gè)惟一的名字。在Smith家中,有Jack、 Jill、Jean和Jonah。在家庭成員之間,用名字來(lái)指代每個(gè)人。但是,其他家庭的成員可能與Smith家的成員有相同的名字。例如,在Jones 家中,其成員的名字是John、Jean、Jeremiah和Jonah。Jeremiah Jones在稱呼Jean時(shí),顯然是指Jean Jones。如果他想指代Smith家中的Jean,就要使用全名Jean Smith。如果不是這兩個(gè)家庭的成員,就只能使用每個(gè)人的全名來(lái)指代他本人,例如Jack Smith或Jonah Jones。 這就是命名空間的作用。命名空間的名稱類似于姓氏。在命名空間內(nèi)部,可以使用其成員的名字。在命名空間的外部,就只能把某個(gè)實(shí)體的名字和命名空間的名稱組合起來(lái),表示該命名空間中的實(shí)體。命名空間的目的是提供一種機(jī)制,使大程序的各個(gè)部分中因出現(xiàn)重名而導(dǎo)致沖突的可能性降到最低。一般情況下,一個(gè)程序中包含幾個(gè)不同的命名空間。 C++標(biāo)準(zhǔn)庫(kù)中的實(shí)體都是在命名空間std中定義的,所以標(biāo)準(zhǔn)庫(kù)中的所有實(shí)體名都用std來(lái)限定。cout的全名就是std::cout,其中的兩個(gè)冒號(hào)有一個(gè)非常好聽(tīng)的名稱:范圍解析運(yùn)算符,稍后詳述。在這個(gè)例子中,該運(yùn)算符把命名空間的名稱std和流的名稱cout分隔開(kāi)來(lái)。 在這個(gè)簡(jiǎn)單的C++程序中,開(kāi)頭的using指令表示我們希望在每次引用命名空間std中的元素時(shí),不指定命名空間的名稱。繼續(xù)前面的類推,使程序文件成為std家族的一組榮譽(yù)成員,就可以只用名字來(lái)引用每個(gè)成員了。其優(yōu)點(diǎn)之一是不需要把cout表示為std::cout,這樣程序代碼就更簡(jiǎn)單。如果省略 using指令,就必須把輸出語(yǔ)句寫(xiě)為: std::cout <<"The best place to start is at the beginning"; |