作者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)