作者godfat (godfat 真常)
站內java
標題Re: [站內] Java 跟 C++ 搞曖昧? Namespace 有用嘛?
時間Sat Mar 11 00:52:55 2006
※ 引述《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)