全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2459
推到 Plurk!
推到 Facebook!

有前輩可以指導一下namespace是什麼用的!

尚未結案
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-20 19:29:44 IP:218.170.xxx.xxx 未訂閱
有前輩可以指導一下namespace是什麼意思? 以及用在什麼時機?
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-20 22:56:26 IP:218.167.xxx.xxx 未訂閱
namespace中文可以稱為"命名空間". 定義為:在預設情形下,宣告於global scope中的每一各Object,function,type都帶來一各全域性的物體.每一各全域性的物體必須有獨一無二的名稱.這意味著使用library,我們必須確保自己的全域性物體不會和library物體的名稱牴觸. 所以利用namespace來解決此問題(global namespace pollution). 詳情可以參考C Primer這本書有詳盡的解說.
zilch
中階會員


發表:5
回覆:87
積分:78
註冊:2002-09-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-21 01:24:23 IP:218.166.xxx.xxx 未訂閱
http://www.cyut.edu.tw/~ckhung/b/pr/variable.shtml namespace 有時候我們希望在同一個場合使用到隸屬於不同 模組/類別/檔案/程式庫, 但具有相同名字的兩個副程式 (或變數)。 這時需要有一個語法讓我們可以稱呼「A 類別的方法 f」 以便和「B 類別的方法 f」區分。 在 c++ 當中, 用 :: 表示「(某類別) 的」, 在 perl 當中, 同樣用 :: 表示「(某模組) 的」, 這個運算子叫做 scope resolution operator。 通常一個 模組/類別/檔案/程式庫 (究竟是何者, 要視語言而定) 就定義了一個 namespace, 所以不同的 模組/類別/檔案/程式庫 當中可以出現名稱相同, 但其實完全不相干的變數或函數; 而如果有需要的話, 程式設計師仍舊可以在同一場合將它們拿來使用, 只要把 namespace 與變數的名稱一起寫出來就可以了。 ("各班的總務請將錢交給系學會的總務") 你也可以把 A::f 視為一個函數的全名, A 是它的姓, f 是它的名。 寫小程式時, 所有的變數都在同一個 namespace 當中, 所以我們習慣直呼其名; 同時使用到好幾個 namespaces 時, 就必須要連姓帶名喊出來了。    支援 namespace 觀念的語言, 通常也支援多層次的 namespace -- 也就是說 namespace 裡面又有好幾個 namespaces。    [轉]C++中採用的是單一的全局變量命名空間。在這單一的空間中,如果有兩個變量或函數的名字完全相同,就會出現衝突。當然,你也可以使用不同的名字,但有時我們並不知道另一個變量也使用完全相同的名字;有時為了程序的方便,必需使用同一名字。比如你定義了一個變量string user_name, 有可能在你調用的某個庫文件或另外的程序代碼中也定義了相同名字的變量,這就會出現衝突。命名空間就是為解決C++中的變量、函數的命名衝突而服務的。解決的辦法就是將你的strTemp變量定義在一個不同名字的命名空間中。  例如:  #include  #include using namespace std; //using namespace編譯指示,使在C 標準類庫中定義的名字在本程序中可以使用 //否則,iostream,string 等c 標準類就不可見了,編譯就會出錯。 //兩個在不同命名空間中定義的名字相同的變量 namespace myown1{ string user_name = "myown1"; } namespace myown2{ string user_name = "myown2"; } int main() { cout<< "\n" << "Hello, " << myown1::user_name //用命名空間限制符myown1訪問變量user_name << "... and goodbye!\n"; cout<< "\n" << "Hello, " << myown2::user_name //用命名空間限制符myown2訪問變量user_name << "... and goodbye!\n"; return 0; } 當然,我們也可以使用程序開頭的預編譯指示來使用命名空間中的名字。使用預編譯指示的好處在於在程序中不必顯式地使用命名空間限制符來訪問變量。以上主程序可修改為: int main() { using namespace myown1; cout<< "\n" << "Hello, " << user_name << "... and goodbye!\n"; // using namespace myown2; cout<< "\n" << "Hello, " << myown2::user_name //用命名空間限制符myown2訪問變量user_name << "... and goodbye!\n"; return 0; } 但第二個變量必需用命名空間限制符來訪問,因為此時myown1空間中的變量已經可見,如果不加限制,編譯器就會無法識別是那一個命名空間中的變量。這一點一定要注意。 以上只是初學者不清楚的一個概念,在以後的文章中還將繼續討論其它的一些概念。
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-21 10:10:05 IP:218.170.xxx.xxx 未訂閱
很感謝二位前輩的指導!
系統時間:2024-06-26 11:02:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!