邪恶的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函数中高亮的那一行)

  1. #include <iostream>
  2. #include <vector>
  3. typedef int UINT4;
  4. using namespace std;
  5. class Hack
  6. {
  7. };
  8. Hack& operator< (Hack &a , Hack &b)
  9. {
  10. std::cerr << "小于操作符\n";
  11. return a;
  12. }
  13. Hack& operator> (Hack &a, Hack &b)
  14. {
  15. std::cerr <<  "大于操作符\n";
  16. return a;
  17. }
  18. int main(int argc, char ** argv)
  19. {
  20. Hack vector;
  21. Hack UINT4;
  22. Hack foo;
  23. vector<UINT4> foo;
  24. return(0);
  25. }

是的,上面这段代码如果只看main函数中的那句“vector<UINT4> foo”,你会觉得很眼熟,然而,事情并非那么简单,我们可以看到vector, UINT4和foo都是Hack类的实例,这就是邪恶的开始,那两个尖括号< >则成了两个运算符,大于和小于,这两个运算符却又被重载了。其实,真正的语句是:

  1. vector.operator<(UNIT4).operator>(foo);

所以,所有的一切都符合我们的C++的规范和语法,自然程序也能被顺利编译通过(至少,在我的G++上是没有问题的)。而整个程序的运行结果自然是:

  小于操作符

  大于操作符

是的,如果你通晓C++的一切的一切,你自然不会对这段程序感到惊奇。这样的事情在C/C++的世界中并不少见,要搞乱C/C++的代码并不是一件 难事,花样多得数不胜数,只要看看《6个变态的C语言Hello World程序》你就知道了,而且,还有一 个简单的教程《如何加密/混乱C源代码》告诉你一些简单的做法。

那么,如果你有一天在读程序中看到“vector<UINT4> foo”,你会觉得那只是一个幻觉吗?

转载:

http://devbean.blog.51cto.com/448512/320210

时间: 2024-10-27 13:54:39

邪恶的C++的相关文章

度度熊与邪恶大魔王

度度熊与邪恶大魔王 Accepts: 3666 Submissions: 22474 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i

评论:用死亡率衡量医院是邪恶的

日前,国家卫计委发布二.三级综合医院医疗服务能力标准(征求意见稿).据称,制定医院医疗服务能力标准,旨在进一步明确二.三级医院的功能定位,完善医疗服务体系,推进分级诊疗.但出乎意料,这个服务能力标准,引起极大的争议.而被舆论猛轰的主要是:“标准”规定,二级综合医院住院患者死亡率不超过0.4%,住院手术死亡率不超过0.28%.三级医院住院患者死亡率不超过0.8%,住院手术死亡率不超过1.4%. 用死亡率来厘定服务标准分级,令人不可思议.在现实生活中,死亡率是个敏感的字眼,特别是对有关公共服务或处于

hdu 6082 度度熊与邪恶大魔王(2017&quot;百度之星&quot;程序设计大赛 - 资格赛 )

度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 251    Accepted Submission(s): 125 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来.邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力.度度熊一共拥有m种攻击方式,第i

2017百度之星资格赛1003 度度熊与邪恶大魔王

度度熊与邪恶大魔王 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害. 当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效. 如果怪兽的生命值降为0或以下,那么怪兽就会被消灭. 当然每个技能都可以使用无限次. 请问度度熊最少携带多少晶石

2017&quot;百度之星&quot;程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)

度度熊与邪恶大魔王 思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了) 状态:dp[i][j]表示对防御为i的怪兽造成伤害为j的所需最小晶石花费. 状态转移方程:dp[i][j]=min(dp[i][j],dp[i][j-t])(t表示每种技能造成的伤害,t=p-i,t≥0) 代码1: #include<bits/stdc++.h> using namespace s

专访吴恩达:我不关心人工智能是否变邪恶

专访吴恩达:我不关心人工智能是否变邪恶 可以说,这几所大学有着最赞的计算机科学课程:卡耐基梅隆大学.麻省理工学院.加州伯克利以及斯坦福.这些地方,分别是吴恩达获得学士学位.硕士学位.博士学位和执教12年的地方. 吴恩达是人工智能界的标杆,实至名归,他甚至还没到40岁.2011年,他成立了谷歌大脑,一个因谷歌强大的计算能力和大量的数据而大放异彩的深度学习项目.当计算机分析了许多的YouTube截屏并能够识别出一只猫时,谷歌大脑普大喜奔地迎来了它最重要的成就之一.(<纽约时报>以「需要多少台电脑才

『邪恶のWIFI』搭建假冒WIFI热点等女神来蹭网啊 - -。

pic by baidu 0x 00 ╮(╯▽╰)╭ 请喊我万恶的标题党  哈哈哈哈哈 0x 01 这里正题 虚拟机(Kali)不支持内置网卡,还好我有神器,插上我的RT8187L,开始搞起 参考资料:zone.wooyun.org/content/2562 下面看攻击测试吧 显示热点链接信息 手机链接假冒热点(Fake-Anka) 手机浏览网页截图 电脑端通过driftnet程序截获的图片 上面仅仅是截了张图片验证成功 当然你可以在ettercap抓获Cookie信息进行会话劫持 然后你懂得.

我是见鬼了么?这是史上最邪恶的脚本!没有之一!

原文地址:http://www.linuxeden.com/a/6675 昨天,微博上的朋友  @马甲与小号   告诉我发现了一个奇怪的东西,本着好奇心使人进步(害死猫?)的目的,我去观摩了一番,于是就有了今天这篇文章. 这是一个 bash shell 脚本,其中有若干可以整蛊(结仇)你的同事的小技巧--或者说恶作剧.看完之后,感觉不寒而栗,要是谁敢这样整我,我一定和他绝交! 警告,切勿在生产环境体验,一切后果脚本作者和本文作者均不不承担! 警告,切勿在生产环境体验,一切后果脚本作者和本文作者均

游标是邪恶的!

在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式是: 而对于游标来说: 这也是为什么游标是邪恶的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 同样的,在性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量…… 从游标对数据库的读取方式来说,不难看出游标为什么占用更多的资源,打个比方: 当你从ATM取钱的时候,是一次取