恐怖的C++语言

作者: C语言基础 | 来源:发表于2018-07-23 16:03 被阅读1次
C/C++ 解答疑问,C/C++学习乐园群:747821062

一个微软的工程师(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++是一个很恐怖的语言,他在贴子中说:

C/C++ 解答疑问,C/C++学习乐园群:747821062

*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++的示例,在这里给大家share一下,让大家看看C++这种编程语言的恐怖和邪恶的一面。下面的这个例子,比那个“#define private public”还更加邪恶。

请看下面这段代码,你能告诉我它会输出什么吗?(注意main函数中高亮的那一行)

C/C++ 解答疑问,C/C++学习乐园群:747821062

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

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

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

$ ./horror

小于操作符

大于操作符

是的,如果你通晓C++的一切的一切,你自然不会对这段程序感到惊奇。这样的事情在C/C++的世界中并不少见,要搞乱C/C++的代码并不是一件难事,花样多得数不胜数。

相关学习资料,C/C++学习乐园群:747821062

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

相关学习资料,C/C++学习乐园群:747821062

相关文章

  • 恐怖的C++语言

    一个微软的工程师(Dmitry Kakurin)争执过用C还是用C++,当时的那个微软的工程师主要是在做Git的W...

  • C++远征之起航篇

    C++和C语言的联系与区别: C++是C语言发展而来,C语言是C++的子集 C++更高效3.相对于C语言,C++添...

  • 慕课网-c++教程起航篇-学习笔记

    c++教程起航篇 C语言是C++的子集。 c语言是面向过程的语言,而C++是面向过程的语言又是面向对象的语言。 C...

  • C++语言学习之面向对象

    1.C语言与C++语言的区别 C++面向对象 C 面向过程 函数+结构体 C++可以运行调用C语言 反之 C语言无...

  • 多年程序员推荐:学习C语言的书籍有哪些?

    c++程序设计教程 c++编程思想 c++大学教程 c++程序设计语言 数据结构算法与应用c++语言描述 c++标...

  • 重读经典系列之《C++ Primer Plus》前3章

    C++融合了3种不同的编程方式: C语言代表的过程性语言、C++在C语言基础上添加的类代表的向对象语言、C++模板...

  • C++课程内容与考核要求

    第一章 C++语言简介 一、课程内容 1. C++语言的发展简史 1.1 了解C++语言的发展历史,达到“识记”。...

  • C++简答题

    一、简答题 1、C语言与C++语言的区别? 答: C语言是面向过程语言,C++是面向对象语言(OOP) C语言...

  • 第一章 预备知识

    1.1 C++ 简介 C++融合了三种不同的编程方式:C 语言代表的过程性语言、添加到面向对象语言、C++ 模板支...

  • 面试题知识点系列之Java语言特性

    特性综述: Java 语言的风格很像 C 语言和 C++ 语言,是一种纯粹的面向对象语言,它继承了 C++ 语言面...

网友评论

  • 冷瞳少年说:大一C语言60飘过的😂😂😂,前面简单的还行,后面指针啥的乱套了都

本文标题:恐怖的C++语言

本文链接:https://www.haomeiwen.com/subject/upsjmftx.html