时间:2022-10-09 17:55:31 | 浏览:2630
原文链接:
https://baijiahao.baidu.com/s?id=1693215018575246509
这是一个复杂的问题,结合在一起:事实,过时的事实,夸大的说法和根深蒂固的未经证实的信念。
事实:
-学习C比C ++容易得多:
一个好的Java或Python程序员在使用C指针时会遇到一些问题,比如缺少类,但是学会可能只需一两个月。这是一些雇主愿意投资的东西。相比之下,要想达到C ++的合理水平可能要花费一年的时间。不是专家水平,只是合理水平。与C相比,这是获得新人才的一大不利条件。
C ++与C的表面相似性引起很多问题:
最佳C ++实践与C和Java最佳实践完全不同。因此,熟练的C程序员往往会在工作量,可读性,错误和运行时速度方面低效率地编写C ++代码。(更正:错误创建效率更高)。一个好的C程序员可能会以C ++的方式使用C ++造成麻烦。经验丰富的C ++编码人员将轻松避免这些问题。
典型的错误包括:使用(原始)指针,手动管理资源,通过值而不是通过引用传递参数,(过度)使用不安全的C操作,使用宏,转到,既不使用range-for也不使用auto,未正确使用重载,以及还有很多。这些错误对于初学者来说是很自然的,并会在以后引起很多麻烦。
C ++中的幕后资源管理:
例如,琐碎的事可能会在堆上分配内存。这可能会在许多以堆分配为忌讳的嵌入式系统上引起麻烦。有很多解决方法,但是它们需要有关分配器的纪律和知识。std::string
C ++中的异常代价:
异常支持实际上在CPU方面是免费的,但就展开信息占用的RAM而言,其开销为非零。这使得C ++在嵌入式系统上更成问题。可以禁用异常,但这会使错误处理复杂化,尤其是在构造函数中。
大型标准C ++库:
即使输入最小的可执行文件,标准C ++库的目标代码通常也很大。这是实现的问题,某些编译器可能能够减小此大小。同样,可以避免占用所有这些内存的标准C ++部分(例如语言环境和iostream),但是那样的话,它就不会完全是C ++。
大C ++代码的编译比编译类似的C代码要慢:
希望C ++模块可以解决此问题(在C ++ 20或C ++ 23中)。但是目前,编译速度是许多聪明人已经从事了十多年的一个实际问题。我希望模块能够将其纳入C ++ 20,并且将得到修复。在此之前,有多种方法可以通过更智能的软件工程来最大程度地减少此问题,并且已经有很多关于该主题的CppCon演示。
过时的事实:
C比C ++具有更好的硬件支持。十年或两年前曾经如此。如今,即使是GCC(最便携的编译器)也是用C ++编写的。这意味着,如果GCC可以是系统上的本机编译器,则C ++可用。如果GCC可以交叉编译,则很有可能可以为系统编译C ++。总体而言,只要编译器团队愿意移植GCC(甚至是clang)而不是开发自己的编译器,C ++就可以像C一样可移植。
但是请注意,正如我在上面的事实部分中所写的那样,移植标准库可能是一个问题。这主要是由于其大小以及对堆的使用。移植库的另一个障碍是底层原语,这对于移植来说可能并不重要。这并不意味着核心语言的可移植性不如C。
夸大的说法:
引用Linus对C ++的仇恨的人们忘记了在1991或1992年的某个时候,Linux已成功使用G ++而不是GCC进行了编译。当时,G ++极具bug,并且生成的代码比GCC差得多。不仅如此,它还早于C ++标准。当时,G ++甚至没有适当的模板支持。Linux内核长期未使用G ++进行编译。
我想许多C程序员都被旧的C ++编译器困扰了,形成了他们的见解,并且厌恶。从那时起,可怕的C ++神话开始传播。实际上,C ++曾经是可怕的。有趣的是,有些学校仍在教授古老而又可怕的C ++(Borland C ++ ,Sergey Zubkov对“哪个是C语言的更好编译器,Dev C ++或Turbo C?”的回答)。
没有事实根据的信念。
C ++有许多问题和弊端,但是最大的反对不是植根于工程学或计算机科学,而在于心理学。
不要误会我的意思,在C ++和C中也有很多不好的的事情。但是,很多次决策不是基于这些事实,而是基于信念。
但是,即使是聪明人,也会不惜一切代价抹黑与他们的信念相抵触的证据。
鄂州市鄂城区关于部分区域升级静态管理措施的通告(2022年第3号)鉴于当前疫情形势严峻复杂,为以更快速度、更严措施、更小代价阻断疫情传播,坚决打赢疫情防控歼灭战,根据国家和省、市有关规定,经研究决定,对部分区域(凤凰街道,古楼街道,西山街道
中新网贵阳9月19日电 (记者 张伟)记者19日从贵阳市人民政府新闻办公室举行的新闻发布会上获悉,9月18日0时至24时,贵阳全市有新冠肺炎确诊病例9例,其中2例为18日阳性并确诊;无症状感染者339例,其中35例为18日阳性并确诊,其余确
大河报·豫视频记者 梁奇慧 郑州市金水区疫情防控指挥部关于进一步加强部分区域疫情防控临时管控措施的通告为切实保障人民群众生命安全和身体健康,减少人员流动,有效阻断疫情传播,根据国家和省、市疫情防控有关工作规定,结合疫情防控形势,经专家组综合
根据疫情防控形势,为切实保障人民群众生命安全和身体健康,快速有效阻断疫情扩散风险,依据相关法律法规和疫情防控有关规定,现就部分区域实行分类管理有关事宜通告如下:一、以下区域实行封控区管理1、建设办张海村和谐公寓2、胜利办荣域社区天鹅堡9号楼
华龙区新冠肺炎疫情防控指挥部关于部分区域实行分类管理的通告根据疫情防控形势,为切实保障人民群众生命安全和身体健康,快速有效阻断疫情扩散风险,依据相关法律法规和疫情防控有关规定,现就部分区域实行分类管理有关事宜通告如下:一、以下区域实行封控区
关于调整部分区域疫情防控措施的通告(2022年第45号)根据当前疫情防控形势,按照《国家新冠肺炎防控方案(第九版)》有关规定,经浚县新冠肺炎疫情防控指挥部研究决定,调整9月8日部分区域疫情防控措施,现将有关事项通告如下:一、高风险区新镇镇和
河北新闻网讯(记者李晓娅)近日,河北新闻网网友通过“阳光理政”平台反映“河北保定清苑区御景国际小区承诺交房时间一拖再拖 望解决”的问题。河北保定市清苑区住建局通过“阳光理政”平台做出回复表示,经协调,御景国际项目6、7#楼已完工开始交房,剩
随着互联网的发展以及编程技术的不断更新,编程语言的种类也是越来越多,甚至现在的话针对每一个互联网的领域,都有不同的适合它的编程语言。不同的语言是为了实现不同的目标而设计的。不过无论你是一个有经验的程序员,还是你是这个编程网络中的新手,有一
学习资料:
作者 | Herb Sutter译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)C++20已全票通过,有望于今年晚些时候发布9月4日,C++ 20的国际标准草案投票结束,而且获得了全票通过。这意味着C++ 20已完