命名空間的 using 聲明(摘自C++Primer第四版3.1)

來源:互聯網
上載者:User

在本章之前看到的程式,都是通過直接說明名字來自 std 命名空間,來引用標準庫中的名字。例如,需要從標準輸入讀取資料時,就用 std::cin。這些名字都用了:: 操作符,該操作符是範圍操作符(第 1.2.2 節)。它的含義是右運算元的名字可以在左運算元的範圍中找到。因此,std::cin 的意思是說所需要名字 cin 是在命名空間 std 中定義的。顯然,通過這種符號引用標準庫名字的方式是非常麻煩的。幸運的是,C++ 提供了更簡潔的方式來使用命名空間成員。本節將介紹一種最安全的機制:using 聲明。關於其他簡化使用命名空間中名字的方法將在第 17.2 節中介紹使用 using 聲明可以在不需要加首碼 namespace_name:: 的情況下訪問命名空間中的名字。using 聲明的形式如下: using namespace::name; 一旦使用了 using 聲明,我們就可以直接引用名字,而不需要再引用該名字的命名空間。 

 

#include <string><br />#include <iostream><br />// using declarations states our intent to use these names from the namespace std<br />using std::cin;<br />using std::string;<br />int main()<br />{<br /> string s; // ok: string is now a synonym for std::string<br /> cin >> s; // ok: cin is now a synonym for std::cin<br /> cout << s; // error: no using declaration; we must use full<br />name<br />std::cout << s; // ok: explicitly use cout from namepsace std<br />}

 

 沒有 using 聲明,而直接使用命名空間中名字的未限定版本是錯誤的,儘管有些編譯器也許無法檢測出這種錯誤。每個名字都需要一個 using 聲明一個 using 聲明一次只能作用於一個命名空間成員。using 聲明可用來明確指定在程式中用到的命名空間中的名字,如果希望使用 std(或其他的命名空間)中的幾個名字,則必須為要用到的每個名字都提供一個 using 聲明。例如,利用 using 聲明可以這樣重新編寫第 1.2.2 節中的加法程式: 

 

#include <iostream><br />// using declarations for names from the standard library<br />using std::cin;<br />using std::cout;<br />using std::endl;<br />int main()<br />{<br />cout << "Enter two numbers:" << endl;<br />int v1, v2;<br />cin >> v1 >> v2;<br />cout << "The sum of " << v1<br /><< " and " << v2<br /><< " is " << v1 + v2 << endl;<br />return 0;<br />}

 對 cin,cout 和 endl 進行 using 聲明,就意味著以後可以省首碼 std::,直接使用命名空間中的名字,這樣代碼可以更易讀。從這裡開始,假定本書所有例子中所用到的標準庫中的名字都已提供了 using 聲明。這樣,無論是在文檔還是在代碼執行個體中引用 cin, 我們都不再寫為首碼形式 std::cin,為了使代碼執行個體簡短,我們還省略了編譯時間所必需的 using 聲明。同樣的,程式執行個體也會省略必需的 #include 指示。本書附錄 A 中的表 A.1 列出了本書中用到的標準為名字的庫名和相應的標頭檔。在編譯我們提供的執行個體程式前,讀者一定要注意在程式中添加適當的 #include 和 using 聲明。使用標準庫類型的類定義有一種情況下,必須總是使用完整標準庫名字:在標頭檔中。理由是標頭檔的內容會被前置處理器複製到程式中。用 #include 包含檔案時,相當於標頭檔中的文本將成為我們編寫的檔案的一部分。如果在標頭檔中放置 using 聲明,就相當於在包含該標頭檔 using 的每個程式中都放置了同一 using,不論該程式是否需要 using 聲明。通常,標頭檔中應該只定義確實必要的東西。請養成這個好習慣。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.