| 查看: 1290 | 回复: 20 | |||
| 当前主题已经存档。 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
yalefield金虫 (文坛精英)
老汉一枚
|
[交流]
【分享】恐怖的C++语言 [转载]
|
||
|
作者:酷壳 Linus曾经(2007年9月)在新闻组gmane.comp.version-control.git里和一个微软的工程师(Dmitry Kakurin)争执过用C还是用C++,当时的那个微软的工程师主要是在做Git的Windows版,但他却发现Git的源码居然是C语言写的,而不是C++,于是他(Dmitry Kakurin)在Linux社区里发贴表示对Linux的不满,语言很直接: Pure C as opposed to C++. No idea why. Please don’t talk about portability, it’s BS. (纯C写的,而不是C++,不知道为什么,请别告诉我是为了移植性,这完全是胡扯。) Linux之父Linus Torvalds马上跟贴,在贴子中,Linus言辞很直接,直接表明C++是一个很恐怖的语言,他在贴子中说: *YOU* are full of bullshit. C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it. (你才是完全在胡扯。C++是一门很恐怖的语言,而比它更恐怖的是很多不合格的程序员在使用着它) Linus的这个观点我是比较同意的,我个人也在几年前的《STL String类的写时才拷贝》以及以后的一些文章中表达过C++的确并不是一个很成熟的语言,这种观点一直都围绕着我。这是因为它的学习成本实在是太高了,编译器和类背着你做了很多你不知道的事,而且,C++非常容易地出错和发生很多意想不到的问题。 当然,这篇文章并不是要继续声讨C++,也不是回顾以前的某个事件。我们这里只谈技术。昨天,我在网上看到一个邪恶的C++的示例,在这里给大家share一下,让大家看看C++这种编程语言的恐怖和邪恶的一面。下面的这个例子,比那个“#define private public”还更加邪恶。 请看下面这段代码,你能告诉我它会输出什么吗?(注意main函数中高亮的那一行) [code] 01 #include 02 #include 03 04 typedef int UINT4; 05 using namespace std; 06 class Hack 07 { 08 }; 09 10 Hack& operator< (Hack &a , Hack &b) 11 { 12 std::cerr << "小于操作符\n"; 13 return a; 14 } 15 16 Hack& operator> (Hack &a, Hack &b) 17 { 18 std::cerr << "大于操作符\n"; 19 return a; 20 } 21 22 int main(int argc, char ** argv) 23 { 24 Hack vector; 25 Hack UINT4; 26 Hack foo; 27 28 vector 29 30 return(0); 31 } 是的,上面这段代码如果只看main函数中的那句“vector 1 vector.operator<(UNIT4).operator>(foo); 所以,所有的一切都符合我们的C++的规范和语法,自然程序也能被顺利编译通过(至少,在我的G++上是没有问题的)。而整个程序的运行结果自然是: 1 $ ./horror 2 小于操作符 3 大于操作符 是的,如果你通晓C++的一切的一切,你自然不会对这段程序感到惊奇。这样的事情在C/C++的世界中并不少见,要搞乱C/C++的代码并不是一件难事,花样多得数不胜数,只要看看《6个变态的C语言Hello World程序》(http://coolshell.cn/?p=914)你就知道了,而且,还有一个简单的教程《如何加密/混乱C源代码》(http://coolshell.cn/?p=933)告诉你一些简单的做法。 那么,如果你有一天在读程序中看到“vector http://coolshell.cn/?p=1724 |
» 猜你喜欢
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有6人回复
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
波不动(金币+3,VIP+0):感谢积极交流回帖,如果可以的话,建议开个新帖,谈谈你的心得! 12-25 21:58
小木虫(金币+0.5):给个红包,谢谢回帖交流
波不动(金币+3,VIP+0):感谢积极交流回帖,如果可以的话,建议开个新帖,谈谈你的心得! 12-25 21:58
|
c++确实是比较危险的 总是在编译通之后出现很多问题 有些无法想象 我个人用过几门语言编程,有一些体会 我的感觉是可能有这样的原因: 一个是它发明的太早了,以至于还没有发现足够多的问题来一一解决 另一个是它太想兼容C这样一个比较初级和过程的语言了,所以有些地方反而削足适履了,这些都导致了c++的不规范 另外最重要的一点原因还是它那对物理内存的操作——指针,正可谓成也萧何败萧何。指针带来了计算效率和极其灵活的编程手段却也使得c++滑头的就像一条抓不住的活蹦乱跳的鱼!使得你永远没有自信掌控它 举一个刚刚经历的例子,比如可变长度的多维对象数组,除了操作繁琐的三重指针外,实在也想不起其他能用的办法,可是一旦选择了三重指针,便会马上又陷入数据越界却不能报错的困扰 |
15楼2009-12-25 18:15:15
2楼2009-12-05 12:59:15

3楼2009-12-05 13:47:15
baobiao007
木虫 (职业作家)
中国特色
- 应助: 201 (大学生)
- 金币: 6482.7
- 散金: 557
- 红花: 40
- 帖子: 3050
- 在线: 1009.9小时
- 虫号: 505962
- 注册: 2008-02-18
- 专业: 应用地球物理学

4楼2009-12-05 15:28:57













回复此楼