Re: [問題] namespace和static問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/04/07 23:26), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《tstanly ()》之銘言: : 在書上看到兩個問題想請教一下 : 1. : 關於namespace : "現在的c++所有程式庫都定義在std的namespace中" : 我們不是把所需要的東西都利用include進來嗎 : 那namespace和include之間的關係是? 我實在很想回「它們之間沒有關係」 不過這一定不是你要的答案 namespace 用來區隔名稱,以避免相同的 symbol 互相衝突。 比如說你今天想自已實作一個類似 vector 的東西 你可以在 header 檔中這樣寫: #ifndef MY_VECTOR_H #define MY_VECTOR_H namespace my_namespace { class vector { ... }; } #endif // MY_VECTOR_H 這麼一來,你的程式可以同時使用你寫的 vector 以及 std 底下的 vector: #include <vector> #include "my_vector.h" int main() { my_namespace::vector a; // 你自己寫的 vector std::vector<int> b; // STL vector ... } #include 的作用只是在 compile 時把該檔案的內容讀進來而己, 它和 namespace 沒什麼關係,你也可以寫個 header file 但完全 不用 namespace,還是一樣可以 include。(不過這種事好孩子不要學) : 2. : "c++之所以支援static成員變數原因在於避免使用global var : 若在OO中使用使用global var豈不是破壞了封裝性質" : 使用global var為什麼會破壞封裝封裝? 因為你所使用的每個函式都可以去存取到它,大大增加被錯誤使用 的可能性。變數的 scope 愈大,你要檢查的程式碼就愈多。 : 對我來說現在寫static var其實和global var沒有什麼兩樣... : 其實是我功力太淺...有人可以指點一下嗎 : 謝謝 static variable 的 scope 僅限該檔案,global variable 則是 任何一個有被連結的 source 都可以存取該變數。 但這年頭 C++ 不鼓勵你用 static variable 了,你可以用 anonymous namespace 來達到同樣的封裝效果。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.30.28

04/08 00:12, , 1F
不好意思 想請教一下 什麼是 anonymous namespace呢?
04/08 00:12, 1F

04/08 00:12, , 2F
我有看過namespace {}沒給名稱的 但這樣要怎麼用內部的東西阿
04/08 00:12, 2F

04/08 00:42, , 3F
他指的就是沒有名稱的沒有名稱的namespacee吧
04/08 00:42, 3F

04/08 00:42, , 4F
他是特別在只能在此file中使用其他成員
04/08 00:42, 4F
文章代碼(AID): #19st2m3U (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19st2m3U (C_and_CPP)