C++为何那么复杂?

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

NN个秋, 最近做项目要用到boost, 发现自己跟不上趟了, 好多C++的新特性又要去掌握,

感觉C++真的好复杂. 感觉C是那么直观和顺畅;

郁闷之下, 在网上搜”为什么C++越来越复杂”, 发现了下面的文章, 哈哈, 转载一下.

知道 C++ 为什么这么复杂吗,看下面的原因:)

C/C++的思索 C++之父访谈录

在1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《计算机》杂志记者的专
访。编辑很自然的认为他会对于过去七年来使用他创建的语言进行面对对象设计做一个
历史性的回顾。而在这个专访中,记者获得了更有价值的新闻,但是最后编辑决定为了
整个IT产业,这个稿子不能发表,但是就像其它被砍掉的新闻,往往还是弄得路人皆知
的。这一篇适当时专访的完全拷贝,没有被编辑、删改或者做过什么润色处理,也没有
发布过,可能看起来不像常见的杂志文章,但这是实情。你会发现真正引人入胜的地方…
…记者: 您在几年前你改变了软件设计世界的面貌,现在再回首往事您有什么感想?
Stroustrup: 事实上我在你到来之前的这些天里一直在考虑这件事,你还记得几乎所有
的人都在写C程序那会儿吗?麻烦的是这些人写得太好了,而且那些个大学也都在努力
的传授C编程技术。的确他们是十分的成功——我要特别的指出“成功”这个词——因
为这种显著的C程序员的培养效率,这就是产生问题的原因。记者: 这难道是个问题吗
?Stroustrup: 当然,你记得大家都在用Cobol语言写程序的时候吗?
记者: 哦,当然,当时我也一样。Stroustrup: 在一开始的时候,这些人简直象半个上
帝似的拿着高工资,享受着贵族一样的待遇。
记者: 唉,那些日子多么的让人怀念,是吧?Stroustrup: 当然了。但是接着发生了什
么?IBM觉得这样不舒服,就投资了数百万来培养程序员,直到程序员多得一毛钱就

可以雇一打。记者: 这就是为什么当时我撤出来了,工资在一年里就降到人们在说做个

记者都比程序员强的地步。
Stroustrup: 对啦!那时侯相同的事情发生在了C程序员身上了。记者: 这个我明白
了,可是您要说的是……
Stroustrup: 有一天,我坐在办公室里就在想如何能把这件事挽回一些。我想知道如果
有一种特别复杂而且难以学会的语言,是否就没有人可以又把程序员们搞到市场的泥潭
里去呢?我用了从X10里了解到的东西,,噢,就是X-Windows,真是一个该死的图形系
统,只能运行在那些个SUN 3/60的机器里,哈!它具有所有我想要的特征:可笑而复杂
的语法,含混的功能描述,还有伪装的OO结构,就算是在现在,还是没有人愿意用那些
东西,如果你不想发疯的话,Motif才是唯一解决方案。记者: 你是在开玩笑吗?
Stroustrup: 没有,事实上还有另外的一个问题,UNIX是用C写的,就是说任何一个C程
序员都可以很容易的成为系统程序的开发者。还记得一个大型的主机系统应用的开发者
通常能挣多少钱吗?记者: 你肯定是知道我当时就是干这个的。
Stroustrup: 好吧,因此这个新的语言一定要通过隐藏所有的系统调用来和UNIX分离开
来,这样可以使那些个就只是知道DOS的人也可以活得很体面。
记者: 我不大相信您说的这个……Stroustrup: 而且到现在时间也够长的了,我相信有
很多的人已经指出了C++是对时间
的浪费,我要说的是,这个过程比我想象的要长的多了。记者: 那么您又是如何做到的
呢?
Stroustrup: 那只是一个玩笑,我真的没有想到人们会对那本书那么认真。任何人只要
长了半个大脑也应该明白面对对象编程是荒谬而不合逻辑的,而且效率低下。
记者: 什么?Stroustrup: 再说代码重用,你什么时候听说过有公司重用他的代码?记
者: 事实上从来没有,但是……
Stroustrup: 那么我提醒你一下,在早期有很多的例子。哦,有一家叫Menter Graphi
cs的俄勒冈州公司,我认为他们应该是感冒了,竟然在90年或者是91年把所有的代码用
C++重写了一遍,对不起,我实在是想不起确切的时间了,我看大家应该从这个事件中
吸取教训。记者: 没有人真正的吸取了教训吗?Stroustrup:没有,而且还有很多公司
犯同样的错误,还向他们的股东解释说那3亿美圆的损失是正
常的,他们就是做了这样的事情。记者: 真的?可是这也只能证明OO方法是能够工作
的,不是吗?
Stroustrup: 也许吧,执行文件是那么大,在一台有128M内存的HP工作站上只是装载到
内存中就要用5分钟时间,然后将象毛毛虫爬树一样的运行。事实上我在第一个礼拜就
发现了这个缺点,奇怪的是好象没人在乎这个,Sun和HP好象只在乎买出那些功能强大
的各种玩意儿,而不在乎在上面跑什么程序。在AT&.T的时候我编了一个“Hello
World”程序,简直是难以置信,执行文件有2.1M。

记者: 那么大?是啊,就是从那时候开始的编译程序产生大个的文件的。Stroustrup:
就是这个样子,如果你不信的话,可以用最新版的g++试一下,你得到的
东西不会小于0.5M,而且就在最近也有一些在各个国家的例子,比如在British Telec
om公司发生的灾难,但是幸运的是他们把原来的计划废弃了,又重新开始,他们就比A
ustralian Telecom公司幸运,现在我又听说Siemens公司又在造“恐龙”了,他们目前
是越来越担心要用来加速执行软件所要使用的昂贵的高速硬件,难道你真的认为那些个
多态继承是一种乐趣吗?记者: 噢,但是C++的确是一种可靠的语言啊!
Stroustrup: 你是真的相信的,对吧?你有没有真的坐下来用C++开发过项目?我来告
诉你会发生什么:首先,我会加入足够的缺陷来让那些微不足道的模块先执行,让工作
超载,在工程扫尾的阶段,你回发现几乎所有的模块都会有这种缺陷,这是因为人们以
为就是应该这样做,因为在C++的教程中就是这样写的。在相同的模块中执行不同对象
的相似操作意味着:有一些东西在各个模块中是完全不相同的。当你有了互不相同的上
百个这样的模块,就可以把他们集成在一起了。其次,我再说说所谓的数据隐藏,上帝
啊,当我听说了有的小组实现了什么对象协同通信,我真的是憋不住想笑!我看,OO方
法中的“协同”这个词可以把项目经理的肋条累断。记者: 我不得不说着太可怕了!你
还说这是用来提高程序员的工资,这太龌龊了!
Stroustrup: 龌龊?不是这样的,任何人都有选择的权利。我是并不想让事情发展成这
个样儿的。不管怎么说,我基本上还是成功的。C++现在已经不行了不是?而且程序员
现在还是能挣到高工资的——特别是那些还要维护这些该死的“++”东西的那些程序员
。你应该明白如果你去维护一个不是由你开发的C++模块是不可能的。记者: 怎么会这
样的?Stroustrup: 你糊涂了?还记得typedef吗?
记者: 噢,当然。Stroustrup: 知道要在头文件里发现象’RoofRaised’这样的变量是一
个双精度数要用多
长的时间吗?想象一下要在一个工程里所有的类定义里寻找那些typedefs… ……
…记者: 那么你为什么认定你已经成功了呢?
Stroustrup: 还记得一般一个C程序项目要多长时间吗?一般是6个月。这对于一个要养
活妻子孩子的程序员是不够的。如果是一样的项目,但是用C++来开发,会怎么样呢?
我告诉你:要一两年才能做完!这不好吗?就是一个小小的编程语言选择的决定,语言
程序员就不会轻易的下岗了不是?而且那些个大学已经很久没有传授C了,现在是对C程
序员的短缺。特别是对UNIX编程熟悉的程序员。在使用了这么多年的“new”以后,而
且一直以来一直都不用担心返回值的问题。还有多少程序员知道使用“malloc”?事实
上,大多数的C++程序员舍弃了返回值,无论什么样的结果,甚至于返回了“-1”,其
实用不着什么’throw’、’catch’、’try’之类的东西,至少你应该知道产生了错误。记
者: 但是继承的确不是可以节省很多时间的吗?
Stroustrup: 是吗?你注意过C项目计划和C++的项目计划之间的不同吗?在进行了三次
系统功能分解后,要确定所有的东西都可被继承到,如果没有那么说明还是有错,但是
有谁在C编程里听说过存储渗漏这个说法?现在你可以在业界的大厂商的产品中发现了
!有很多的公司不得不放弃了,并且把工程转包出去,他们知道最后可能象筛沙子似的
把内存站用完,他们才不想遭那份罪呢!记者: 也有一些工具来……
Stroustrup: 大多数的防渗漏的工具不还是用C++写的。记者: 果把这些东西发表了,
我们可能在这个行业里无法立足了,你知道吗?
Stroustrup: 我不相信,就象我所说的,现在C++已经是在垂死挣扎了。任何公司只要
清醒,就会认识到用C++来做项目简直是一场灾难。如果还没认识到这些,那就是活该
!有一段时间我使劲的劝Dennis Ritchie用C++重写UNIX。
记者: 啊?天哪!他是怎么说的?Stroustrup: 我不得不承认他的洞察力,我想他和
Brian在很早的时候就清楚的明白了
我的意图,但是从来没有说出来,他说如果我愿意的话,他可以帮我用C++写个DOS。记
者: 那么你写了吗?
Stroustrup: 事实上,我写了,我完成后可以给你一个DEMO,我在机房里的一台4个CP
U的Sparc 20上做的,运行得特别的快,而且只占了70M的硬盘空间。记者: 有For PC的
版本吗?
Stroustrup: 现在你在开玩笑了,难道你没见过Windows 95吗?我认为它是我成功标志
之一,
记者: 我也总是在想关于Unix++,还是有人在试着搞这么个东西的。Stroustrup: 那是
因为他们还没有看到这个采访手迹。
记者: 对不起,不过依我看,我们恐怕不会刊发这些东西的。Stroustrup: 但是这是个
世纪故事,我只是想让我的程序员伙伴们记住我为他们做了什
么,你知道这些个日子里C++程序员可以挣多少钱吗?记者: 我所听说的是一个顶尖的
C++程序员一小时可以挣到70~80美圆。
Stroustrup: 知道了吧!而且我打赌他肯定可以挣那么多!!单步跟踪我放在C++里面
的那些gotcha,并不是容易的事了。在在项目中使用C++的所有特性即使是有经验的程
序员也会感到困惑. 事实上有时侯我也是觉得挺难受的,虽然这个特性是为我的初衷而
做的,我几乎喜欢上了这个语言。记者: 你的意思是说你以前是不喜欢的?
Stroustrup: 我是狠它的!难道你不同意它是挺笨重的吗?但是当那本书的版税源源不
断的……我想你能够明白这些。
记者: 等一下,关于参数的定义,请您一定要回答,您是否真的改良了C的指针。
Stroustrup: 呵,我也是总是想知道这个。一开始我认为我做了,但是有一天我和一个
刚开始学习C++的程序员讨论了这个问题。他说:“他从来就不知道他的变量是否被引
用了,所以我还是在使用指针,那个星号总是在提醒我。”
记者: OK,一般在这个时候我一般是说:“Thank you very much.”,但是现在用在这
里好象还是不够。Stroustrup: 答应我一定要发表。
记者: 好的,我会通知您的,但是我已经知道了我的编辑会说什么了。Stroustrup: 谁
会相信呢?你能把这盘录音带给我拷一个吗?记者: 可以。正文完
下面是我自己的一点看法:看完这篇文章我想提醒一下,电脑界没有权威,软件世界是
年轻人的天下。我这里所指的年轻人是指思想而不是年龄。
如果说BASIC都能够存在C++就有千倍于BASIC存在的理由。其实现在的开发工具各有千
秋,很难说那一种拥有绝对的优势,只是在不同的领域有各自的优势。
此外OO技术出现已久,当到目前来讲都很难得到广泛的应用。我想OO会成为一种趋势,
但也绝对无法取代面向过程的开发方式。OO不带包含了开发同样也包含了设计,OO与面
向过程的开发模式来将还是新事物,至少面向过程的各种技术都已经很成熟。世界是一
个多元的,OO也绝对扮演不了面向过程开发的终结者,我深深相信这一点,虽然OO技术
有具有许多面向过程技术所不具备的优势。代码重用,是开发人员的梦想,所有的人都
在向这个方向努力,在这过程中开发者遇到
非常大的阻力,但我想无论多大的阻力也无法阻挡前进的步伐。我想我的看法不一定正
确,而且我也不是什么权威。但我认为能够思考和会用自己的方
法想问题至少表明他对这些问题有了解而且真正去思考过而不是盲从。–
如何才能视美女如粪土????

[C语言复杂数据结构 cpp] —— 深入探究C++的高级数据结构 hash函数用于将键映射为索引,put函数用于向哈希表中插入键值对,get函数用于获取指定键对应的值,remove函数则用于删除指定键对应的键值对。需要注意的是,在实现insert和remove函数时,我们使用了广度优先搜索的算法来遍历树的所有节点。当然,这只是数据结构的冰山一角,希望本文的内容能够为你打开更加广阔的编程视野,激发你的编程激情。insert函数用于向链表中插入新的节点,remove函数用于删除链表中已有的节点,print函数则用于输出整个链表中的所有数据。 阅读详情

相关推荐

C/C++的思索 C++之父访谈录(真的吗?)

贴者:不着大家看完有何感想?C/C++的思索 C++之父访谈录在1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《计算机》杂志记者的专访。编辑很自然的认为他会对于过去七年来使用他创建的语言进行面对对象设计做一个历史性的回顾。而在这个专访中,记者获得了更有价值的新闻,但是最后编辑决定为了整个IT产业,这个稿子不能发表,但是就像其它被砍掉的新闻,往往还是弄得路人

syncmaster550的专栏 1121

C++三大特性—继承“复杂的菱形继承及菱形虚拟继承”

C++的一个大坑:菱形继承 希望这篇文章能让你理解什么是菱形继承,以及菱形继承的注意事项,以及为了解决菱形继承又引入一个坑 虚拟继承

DEXTERFUTIAN的博客 1292

我对C++复杂性的一些认识

我学习使用C++,已经有差不多7,8年了。从当年在学校写小程序,到后来在公司写程序做设计。从VC++(虽然它不是标准C++),到后来嵌入式的C++,到现在在项目中,标准的C++。坦白说,C++确实很复杂,和Java, Objective-C,Python,Ruby这些语言比,它确实很复杂。这种复杂来自于几个方面:[1] 编程的模式太多。面向过程,基于对象,面向对象,泛型。而且在面向对象的时候,它可...

AnkyHe's Blog 246

C++语言特性总结

struct是结构体,描述的是数据结构集合,即一个结构体中可以包含多个不同或相同的数据类型的成员变量。

amierpomme的博客 1139

C++应用程序性能优化(三)——C++语言特性性能分析

C++应用程序性能优化(三)——C++语言特性性能分析 一、C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高但性能要求并不是很高的程序。因为大多数开发人员认为,C++语言设计时因为考虑到支持多种编程模式(如面向对象编程和范型编程)以及异常处理等,从而引入了太多新的语言特性。新的语言特性往往使得C++编译器在...

weixin_34357436的博客 563

为什么C++复杂复杂的必要性是为什么

文章目录1 常见观点2 反驳观点3 为什么要解决的问题越复杂,工具就不得不复杂?3.1 类库和语言语意3.2 折中方案3.3 复杂度的守恒 1 常见观点 可以轻易的找出许多文献说明C++复杂了,例如学习C++的书籍的厚度。 这样以至于C++的设计者Bjarne都曾怀疑具有类的C是不是已经太庞大了。 因为,总有大量对语言的新特性的要求: 对如何利用现有特性完成某些任务没有足够的了解 天生喜欢评价...

韩江雪de 小屋 1万+

为什么C++复杂复杂到哪了?)

最后有精彩!!!

阿玥的小博客 8703

浅论 C++复杂

C++ 拥有 30 多年的历史,作为一门影响广泛的编程语言,它所受到的关注和争论恐怕是任何一门其他的语言所不能比拟的。十几年前,Java 等新生语言的出现曾导致 C++ 信任危机,但最终 C++ 以自身非凡的品质屹立于主流编程语言的行列。在有着众多编程语言可以选择的今天,到底有没有必要学习、怎样学习、怎样使用 C++?对于广大程序员,特别是刚刚接触编程的初者,这些问题至关重要。C++ 遭受批评最多的是它的复杂性,对于这个话题,已经有很多文献讨论过。

Doublelv 的博客专栏。 6829

C++ 复杂性 – 为什么你会觉得 C++ 复杂

C++ 是否真的复杂因人而异,但多数人都会认同这一观点。“为什么你觉得 C++ 复杂”这一问题的答案自然也十分主观,但这是个非常有趣的问题,而且会得到各种不同答案。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 1263

cpp c++summary笔记 复杂类型 “right-left” rule

先向右走在向左走,循环往复,右侧的终止为看到右括号,右中括号,左侧为左括号,指针(或其他int等)。

ResumeProject的博客 415

关于C++复杂性的零碎思考

本文系数月前随手写下的,没有起承转合与段落章法,观点更是未经推敲。仅供参考。------------------------------------------------------------------------------------------C++的表面困境来自两方面,一是开发效率低,而是容易犯错,维护难度大。此二者俱是表象,本质就是一个——过度复杂。或有人说C++之关键缺陷是没有统

孟岩 2万+

震惊!5句话搞定所有CPP的复杂类型声明

什么叫搞定:任意给一个类型声明语句,能够判断其是争取的还是错误的,如果是正确的,其是什么含义。 什么叫复杂类型声明:融合指针,引用,const,数组,函数声明,函数指针等各种元素的类型声明。 对象是一块具有类型的内存空间; *与&都是可以做为类型修饰符使用,用于修饰类型; const是对象修饰符,用于修饰对象,表示该对象的内容不能改变; 引用不是对象,引用初始化后与某个对象绑定后不能再...

LemintC的博客 418

C++复杂性分析

C++复杂性只是一个必要条件,并非问题的根本症结。根本症结在于人的心理,每个人都喜欢戴着脚镣跳舞,并且以为是“创新”。意识到这一点之后可以帮我们避免被各种各样名目繁多的语言细节和技巧占去不必要的时间。   然而,C++复杂性始终是一个不可回避的现实。C++中有大量的陷阱和缺陷,后者导致了数目惊人的惯用法和workarounds。不加选择的全盘预先学习,是非常糟糕的做法,不仅低效,而且根本没有必

796

C++算法复杂度分析

算法复杂度分析是评估算法效率的关键工具,它帮助我们理解算法在不同规模输入下的性能表现。答:数学家有一个定义,只要一个算法找到答案所需要的时间,能做到n^k可以了。n^k 是n的多项式,因此满足这个条件的算法,叫做多项式时间算法。多项式时间算法是一个好算法。通过了解算法复杂度分析,可以预测算法性能,做出更合理的算法选择,优化现有代码的效率。(大数据来了,有些算法抵不住啊,必须要更新自己的知识库了)🐍🐍🐍🐍🐍🐍。(题外话:算法的改进需要人,人也需要反过来“驯服”算法,大家加油!:好算法和坏算法的关键

wsys_yysn的博客 1340

C++》解密--算法复杂

数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元 素的集合。算法就是定义良好的计算过程,他取一个或一组的值为输入,并产生一个或一组值作为输 出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。3、数据结构书籍空间复杂度也是一个数学表达式,是对一个算法在运行过程中因为算法的需要额外临时开辟的空间【函数运行时所需要的栈空间(储存参数、局部变量、一些寄存器信息等)在编译时期已确定好 了,因此空间复杂度。

2301_78136992的博客 820

C++复杂度计算总结

定义:衡量算法运行所需时间与输入规模之间的关系,通常用大 O 符号表示,如 O(n)、O(n^2 ) 等。这里的存储空间不包括输入数据本身占用的空间,而是算法在运行时临时创建的变量、数组等占用的空间。但分析相对复杂,常需对输入分布做假设。最坏情况:考虑输入数据使算法执行时间或空间占用最长 / 最大的情形,能为算法性能提供一个上限保证。最好情况:输入数据使算法执行时间或空间占用最短 / 最小的情况,可给出算法性能的下限参考。确定额外空间:找出算法运行时创建的除输入数据外的所有变量、数组等占用空间的情况。

weixin_42366947的博客 788

C++复杂的必要性是为什么为什么C++复杂

文章目录 1 常见观点 2 反驳观点 3 为什么要解决的问题越复杂,工具就不得不复杂? 3.1 类库和语言语意 3.2 折中方案 3.3 复杂度的守恒 1 常见观点 可以轻易的找出许多文献说明C++复杂了,例如学习C++的书籍的厚度。 这样以至于C++的设计者Bjarne都曾怀疑具有类的C是不是已经太庞大了。 因为,总有大量对语言的新特性的要求: 对如何利用现有特性完成某些任务没有足够的了解 天生喜欢评价主流编程语言的人 许多使用者遇到了实际的问题,确实需要语言本身提.

qq_36546177的博客 486

C++ 时间复杂度和空间复杂

理解时间复杂度和空间复杂度可以帮助你编写更加高效的代码,避免在大规模数据处理时遇到性能瓶颈。在实际开发中,选择合适的算法和数据结构,并权衡时间和空间的使用,是优化代码性能的关键。

qq_50373827的博客 1232

为什么C++复杂?有必要这么复杂吗?| 原力计划

作者 |繁星蓝雨责编 | 夕颜头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews)常见观点可以轻易的找出许多文献说明C++复杂了,例如学习C++的书籍的厚度...

CSDN资讯 3719
上一篇: 【C++】unsigned int和补码
下一篇: 如何在windows下使用git及github仓库管理项目
vonmax007
博客等级 码龄12年 83粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值