看板java
标 题Re: 请问阵列的宣告…
发信站清华资讯(枫桥驿站) (Tue Jun 22 12:52:51 2004)
转信站ptt!ctu-reader!ctu-peer!news.nctu!news.csie.ncyu!news.cs.nthu!maple
※ 引述《[email protected] (蓝月枫铃)》之铭言:
> > // class3必须定义 operator %
> fa 只是一个函数。
> > 这样的作法跟script的差别就在於script用一个共通的type来函括所有type
> NO, function(x) 并不是用一个共通的 type ,而是使用「隐式 template」!
> 我的 script 是可以编译为执行档的。
隐式template? 没听过这种东西, 也不知道用处在哪
> > (如vb的variant, js的var) 所以当函式回一个共通的type时,他可能是
> > int, 可能是char, 可能是一个object, 这时程式要怎麽处理就完全依靠
> > 程式"内隐"的规则. 例如,
> > function func(x)
> > { if (x==1) return CreateObject("xxx.xxx");
> > else return 1;}
> > 请问, 呼叫func的客户端要怎麽能知道他拿到的是int还是 object?
> > 答案是客户端得去了解func的实作内容. 这样的情形严重的伤害到程式
> NO, 编译时期无法确定其型别,但是执行时期可确定。
> 因为我们不必在编译时期就确定他的型别!例如 cout << fb(x);
使用template就意谓者型别必须於编译期决定, (多型型别除外), ex
cout 是ostream type的物件, 但他的实作并不是去处理执行期才确定的物件
而是针对每种物件定义出不同版本的function, 再由compiler辨析该采用的版本
> script 可以不损及型别安全和效能。这就是我对 C++ 不甚满意的地方。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
你真是说了天大的笑话了, 型别安全和效能恰巧就是scrip的缺点,
你如果要说服大家的话,就拿出理由来证明吧
> > high-level, type-safety, efficiency是c++的特性, 要让c++改用
> > script的方式就好像叫c++自废武功一样
> > 至於你下面所提的例子, 事实上script的变数并非没有型别,
> > 而是他们都是继承至同一个共通的型别,好比是java跟.net的共同基底类别
> 如上所述,并非使用共通型别,而是使用「隐式 template」,
> 再由编译器检查是否符合所有算子以及成员。 时下的 template 不也如此?
既然说是template, 又说是由compiler检查type-safety,
那又何来以上所说runtime才确定型别的说法?
你的观念很矛盾
> > dynamic只会回传交通工具这件事 ,却要让使用者冒着可能不小心把回传
> > 的交通工具当成建筑物来使用的风险, 其道理何在?
> 已经说过原因了,我们并不需要在编译时期就确定他的型别!
> 时下 C++ 的 virtual 不也如此?我只能说 C++ 太嫩。
c++太嫩? 我看是你太嫩, 你根本不了解c++的多型跟泛型的意义 就在此妄下断言
virtual/多型 允许物件的确切型别可以在runtime决定, 但是在compile-time,
多型物件仍会遵循其base class的规则,由compiler进行检查, 正因为多型物件
在runtime是以base class物件的方式来使用, 所以即使compiler不知道多型物件
的确切型别,也没有违反type-safety的危险.
(多型物件以concret type object来使用时当然也就遵循各别多型物件的规则)
> > 另外, union的作法绝对是最差的,完全不用考虑.
--
※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw> ◆ From: NK219-91-104-168.adsl.dynamic.apol.com.tw