C_and_CPP 板


LINE

我也跳下来玩,不过我 C++ 很弱,请打小力一点 <(_ _)> 1. 效能比 C 差 这个最常见的理由就是「C++ 一定会塞很多你不知道的东西在里面」 我只能说「不知道的东西也敢讲得这麽肯定,不简单。你不知道,我可是都很知道。」 有的人会拿出这个说法,大概是看了台湾坊间十年前的烂书, 事实上在十年前的 Inside C++ Object Model(我看这本的时候还没中文版)就讲了, 「你不需要付出你不需要付出的代价」当一个东西你没有用到,C++ 就不会 charge 你。 当 C++ 你只用跟 C 同等语法功能的时候,run time overhead 最多 5%。 当你需要 OO,exception,template 等功能的时候, 你用 C 语言实作这些功能,最多也只能跟 C++ 一样快, 一般状况是更慢,而且你要实作到一样快,你的 C 得受过相当训练。 (更别说大部分的人连 C 要怎麽实作 OO 跟 exception 都不知道了) 现在那 5% 也几乎不见了, 事实上,现在 C++ 普遍可以作到比 C 更好的效能, std::sort() 狂电 qsort() 三倍是十年前就知道的东西, 一般容器的效能 C++ 也比 C 好 40%。 C 用 function pointer 的地方很多都可以用 C++ functor 来作到数倍的效能提昇。 这是 C 永远作不到的最佳化。 「效能差」是 C 拥护者在十多年前的说词了, 老实说多看看 news group,会发现现在已经没人讲这个了, 拜托不要再拿出来讲了,这点真的是解释太多次多到我都想睡了 orz (附带提一下,现在要打 C++ 顶多就是讲太 expert friendly) 2. C++程式不易读 这是十年前 Java 用来打 C++ 的论点, Java 当初真的喊很大声,让我们复习一下 Java 当初讲了什麽: 我们不支援 operator overloading,因为你不能保证使用者不会乱用, 谁知道他帮 Integer 实作的 operator + 里面是不是减法呢? 是不是很好笑?讲得好像 Java 的 compiler 会检查出下面这种东西然後OB挡掉一样 class Integer { int value = 0 ; Integer add ( rhs ) { Integer result = new Integer(this) ; result.value -= rhs.value ; } } 不好意思,不会挡掉,编译器会很开心把他编出来。 看到没有?只要举的例子够奇怪,你什麽都能证明,开玩笑的, 是不管你用什麽语言,你都没办法阻止脑残的程式设计师干出蠢事, 而且 d = ( a + b ) * ( c + d ) 就是比 d = a.add(b).mul(c.add(d)) 好读, 这点不是我自己在讲的,有个极端反对 operator overloading 的语言也赞成我, 怎麽说?因为 Java 下一版也要内建 BigNumber 的 operator overloading 了 ~_~" 连抱持这个观点到极限的 Java 都弃守了,C# 也早就不鸟 Java 那套说词了。 所以不要再自己用手打一堆自己平常写程式都不可能写出的烂 code 来当作例子, 举那些例子唯一能证明的就是举例的人自己会写出这麽烂的 code,不是别人。 让我这样说吧:的 C++ 可能不好读,别人的可不是。 3. 物件导向不适合底层程式(或是没办法跟底层衔接) 那个问 ASM 跟 C++ 接合的,你不会不代表没办法,Google 一下就有答案, link 找不到东西那是因为 C++ 为了 overloading 会作 decorated name, 不知道 decorated name 就去 google,不想看英文的, 可以去 bs2 program 版搜标题「使用 dll 问题??」。 而且幸运的事 C++ 不是纯物件导向语言。 当你发现某个地方适合 procedual paradigm 的时候,就用 procedual paradigm, 当你觉得某种型态适合 generic paradigm 的时候,就用 generic paragigm, 当你觉得某个架构适合 Object based paradigm 的时候,just do it! 没人有人强迫你用 C++ 的时候一定要用 Ojbect Oriented paradigm。 (Java 才有这样的强迫症:P) 以上几种设计典型又没有冲突,一个大型程式一定会每一种都用到。 (如果你知道怎麽用的话,一定每种都会用到, 如果有人只会 procedual,那赶快多学一点) 4. C++ 的复杂度太高 只有这点是真的, 所以请大家不要学 C++,去学 Python 或是 Ruby。 Python 多美好阿,我现在几乎都写 Python 了呢 ="= -- To iterate is human, to recurse is divine. 递回只应天上有, 凡人该当用回圈.   L. Peter Deutsch --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.105.151
1F:推 zlw:推第4点,前面一大串讨论,没几篇看得懂 03/08 17:17
2F:→ tinlans:其实我们做 compiler 的最怕的是 user 自己写的 code,因 03/08 17:23
3F:→ tinlans:为猜不出哪些能最佳化哪些不行;同样的功能 C 是人写的, 03/08 17:23
4F:→ tinlans:C++ 是 compiler 帮你生的,compiler 当然很清楚自己生的 03/08 17:24
5F:→ tinlans:code 是要做什麽,自然也知道那些自己生出来的东西能不能 03/08 17:24
6F:→ tinlans:合并或砍掉。 03/08 17:24
7F:→ tinlans:所以我反而无法理解那些强调用 C 写效能会好的论点。 03/08 17:25
8F:→ tinlans:关於 4.,我现在是常用 SWIG 把 C++ 接到其它语言去 XD 03/08 17:30
9F:→ karcher:推python~~ 03/08 19:21
10F:推 StubbornLin:python赞 03/08 19:35
11F:推 Tiberius:Py_Initialize(); // XD 03/08 19:49
12F:→ softwind:Python推 不过这边是C_AND_CPP版 呵呵呵 03/08 20:39
13F:→ jaw109:"再优雅的程式语言也不能阻止programmer写出烂程式" 03/08 23:39
14F:→ jaw109:忘记是在哪里看到的了..... 03/08 23:41
15F:推 Romulus:我要推Ruby qq 03/09 12:49
16F:推 henry666666:推一下有口皆碑 03/09 21:57







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP