恐怖的C++语言
来源:互联网 发布:金山软件上市部分 编辑:程序博客网 时间:2024/04/26 16:12
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函数中高亮的那一行)
01
#include <iostream>
02
#include <vector>
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<UINT4> foo;
29
30
return
(0);
31
}
是的,上面这段代码如果只看main函数中的那句“vector<UINT4> foo”,你会觉得很眼熟,然而,事情并非那么简单,我们可以看到vector, UINT4和foo都是Hack类的实例,这就是邪恶的开始,那两个尖括号< >则成了两个运算符,大于和小于,这两个运算符却又被重载了。其实,真正的语句是:
1
vector.operator<(UNIT4).operator>(foo);
所以,所有的一切都符合我们的C++的规范和语法,自然程序也能被顺利编译通过(至少,在我的G++上是没有问题的)。而整个程序的运行结果自然是:
1
$ ./horror
2
小于操作符
3
大于操作符
是的,如果你通晓C++的一切的一切,你自然不会对这段程序感到惊奇。这样的事情在C/C++的世界中并不少见,要搞乱C/C++的代码并不是一件难事,花样多得数不胜数,只要看看《6个变态的C语言Hello World程序》你就知道了,而且,还有一个简单的教程《如何加密/混乱C源代码》告诉你一些简单的做法。
那么,如果你有一天在读程序中看到“vector<UINT4> foo”,你会觉得那只是一个幻觉吗?
COMMENTS:
确实像是作者说的那样,C++某些情况下实在是太恐怖了,现代的编译器太进步,进步到有的时候自以为是的做了很多不应该做的工作,如果这些不了解,一旦程序crash掉连什么原因都无法搞清;还是那句话,一个优秀的程序员应该熟悉他程序的每个字节。
- 恐怖的C++语言
- 恐怖的C++语言
- 恐怖的C++语言
- 恐怖的C++语言
- 恐怖的C++语言
- 恐怖的C++语言
- C++是恐怖的语言?
- C++是一门恐怖的语言 --LINUS
- C语言对电脑做的事儿啊,总有那么一丝恐怖,C语言操盘电脑两例
- C语言恐怖水母问题(冒泡排序)
- C语言——恐怖水母(贪心算法)
- 最恐怖的英语
- 最恐怖的日记本
- 真的很恐怖
- 企业政治的“恐怖”
- 最恐怖的单词
- 稳定--恐怖的速度
- 恐怖的人狼城
- [C++/CLI编程宝典][1]C++/CLI资料汇总
- 有趣的缩写I18N,L10N及延伸知识
- 日文邮件用语
- 一个使用c++在lua中创建自定义数据类型的简易方法
- 日语邮件用语2
- 恐怖的C++语言
- 邮件收发方面的日语词汇
- [C++/CLI编程宝典][2]什么是C++/CLI语言
- [C++/CLI编程宝典][3]C++/CLI能做什么
- aspnet_regsql.exe 注册不上 本机的 SQL Server
- 程序员考核的五大死因
- [C++/CLI编程宝典][4]第一个C++/CLI程序
- Struts2输出XML格式的Result
- 你的选择:学习的不同境界