Re: [站內] Java 跟 C++ 搞曖昧? Namespace 有用嘛?

看板java作者 (godfat 真常)時間18年前 (2006/03/10 23:40), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串11/27 (看更多)
※ 引述《PsMonkey (痞子軍團團長)》之銘言: : [舉手] 兩位... 我越來越看不懂了 : (包括 godfat 回我的那一篇...) : 如果有人也看不懂得,麻煩推文支持一下 : (路人:是誰不讓我們推文的 ==.==) 老實說啦,我覺得這比較像我個人的抱怨啦 @_@b 所以不用太在意其中的說詞…有時候我想到什麼就寫什麼 難免也會有一些錯誤…真是不好意思 : 能不能舉例一下 namespace 是怎麼處理 and 解決命名問題 : 畢竟這是 java 版,不懂 namespace 也是很正常的 \囧/ 不知道是廣義 namespace, 還是狹義的 C++ namespace? XD 前者我不敢下定義,但後者的話我可以舉例 XD 其實是很單純的觀念啦,我覺得你應該知道是什麼意思才對 可能是被太多名詞混淆了…? 在 C++ 中,所有標準提供的東西都放在 namespace std 下 namespace std{ /* blah blah blah */ } 假設現在裡面有一個 max function namespace std{ int max(int, int); } 那麼你在全域空間(global)中這樣用: max(5, 10); 是沒有效果的,因為看不到,compiler 會跟你抱怨 max 是啥? 正確的用法是: std::max(5, 10); 或是 ::std::max(5, 10); 前者表示在「現在」這個 namespace 中找到下一層的 std namespace, 並在其中尋找 max 在哪裡? 後者則是在「global namespace」中尋找 std namespace, 並在其中尋找 max 在哪裡? 如果你現在在 global namespace 中建立另外一個 max void max(double, double); 假設你現在在 global namespace 中這樣寫: max(5, 10); 那麼 compiler 會認定你使用的是 void max(double, double); std::max(5, 10); 則會認定為 std namespace 下的 void max(int, int); 大概就是這樣了…… 簡單地說,也有點像 file system 的樹狀結構啦 XD 嗯,但是在 C++ 中的話故事還沒有結束 XDD 如果前面再這樣寫: using namespace std; // 匯入整個 std 或是 using std::max; // 匯入 std::max 則 max(5, 10); 會叫到誰? 我不確定答案老實說 XDD 總之這樣就變成 overloading 的 max 了 我想 compiler 多半會抱怨兩個 function 都完全吻合 不過這都是題外話了,C++ 還有很多很複雜的機制... 例如 Koenig Lookup... Java 中應該沒有(猜的 -_-b) : (好啦,可能只有我不懂 T__T) : package... 畢竟這是 java 版,要當作基本常識 \囧/ : (不懂得也可以另開標題發問阿... 不要客氣... ) : 就拜託各位了... 嗚嗚,Java 我才剛碰,程式沒寫超過五個,什麼都不懂 XD 上次碰到的 package 問題後來翻書解決了,再來也不知道有什麼問題 XD 沒有問題自然不知道怎麼問了 囧 而且怎麼好意思問基本常識呢 XD 另外順便提一下剛才想到的 Sun 這樣的做法,讓我想到一句話 Java isn't platform independent; it is a platform. package 要求 global unique, 不讓你有任何操作相對路徑的機會, 也就是說,他是在任何的 file system 或 database 上再建立一層 namespace... -classpath 就是告訴你要把後面的這個路徑當作 這個全新的 namespace 的另一個進入點… 嗯,我想到一個問題了,雖然這自己測試看看就知道了, 不過板大說不用客氣是吧…? XD package test; 假設放在 ~/fat1/test 下 package test; 假設放在 ~/fat2/test 下 那麼我執行某個程式,把 ~/fat1 和 ~/fat2 都加入 classpath 下 是否會造成衝突?如果是的話,那確實這就是 Java platform 了 @_@ 這樣變成,我的每個正在運行的程式都要有獨立 package 路徑, 不管程式實際路徑在哪裡… 越想越覺得 Java 也是個 OS Orz 上面胡說八道居多,請莫太介意 Orz 只是被 Java 巨大的架構震懾住了,有點神智不清 Edited: 啊啊,補充個東西 -_-b 由於 import 是動態載入 .class 檔, 所以自然而然我就會認為 import path 也應該要是動態的 所以上面有一篇會說 String config = Config.getPath(); import config; 如此動態決議載入的路徑。 : ==== : 可憐可憐我吧~ 不然我連精華區都不知道該怎麼收 T__T -- Hear me exalted spirits. Hear me, be you gods or devils, ye who hold dominion here: I am a wizard without a home. I am a wonderer seeking refuge. Sacrifice -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.210.113 ※ 編輯: godfat 來自: 220.135.210.113 (03/11 00:57)
文章代碼(AID): #144Ptbf3 (java)
討論串 (同標題文章)
文章代碼(AID): #144Ptbf3 (java)