永发信息网

为什么还是有不少人认为 C++ 不如 C

答案:2  悬赏:20  手机版
解决时间 2021-11-17 12:43
  • 提问者网友:两耳就是菩提
  • 2021-11-17 03:53
为什么还是有不少人认为 C++ 不如 C
最佳答案
  • 五星知识达人网友:玩世
  • 2021-11-17 04:50
C语言作为一个语言不在任何意义上比C++好。

----修订----
但是C有几个决定性的优势:

C没有C++的ABI问题
C的生成代码尺寸可控
---修订结束---

C++提供了重要的抽象手段,这些手段被证明对于工业化代码生产是必须的,这里面至少包括范型、数据抽象、面向对象、异常、RAII等。

正是C++提供的上述设施,是的如同C/C++这样的Native的、静态类型的传统系统编程语言,竟然有了生产通用的程序库的可能,这是在C里面从来没有做到的,C雄霸计算机界几十年,坐拥最优秀的人才,最庞大的人力,到如今,几乎每个C工程都必须为自己准备或定制基础数据结构设施,这不是没有原因的,其原因就是,C在这个方面完败给了C++,C语言就不是一个可以制作通用数据结构库的语言。

哪怕只是为了使用STL,在可能的情况下都应该使用C++,而不是C。

C++的C部分,一般来说,也比相应的Ansi C更好,有更强的类型检查,更方便的类型检查,更方便、明确的初始化语义(是std::fill(blabla)还是memset(blabla)好?更何况后者很可能还不正确)。

C++提供的数据抽象和面向对象的支持,在这几十年中,被几乎所有的后来者沿用,新兴的工业语言C#/Java,没有一样不是以类似C++的方式提供这些东西的,并且只有在C++里面,这些东西是以不带来额外代价的方式提供的。

关于C++比C性能差的说法几乎总是胡说八道,没错,虚函数总是比直接的函数调用慢,但是,直接的函数调用和虚函数不是一样的功能!在C里面,这可能需要根据某种类型标识去分派,或者使用函数指针,这不仅并不比C++快,而且无论以何种审美观来看,都不如C++的方式优雅。

有的人会争辩C++提供的功能实际上是不被需要或者不太被需要的,这太霸道和傲慢了,如果C程序员从来就不需要那些东西,C里面就不会出现那么多模拟动态绑定、面向对象、范型等C++特性的所谓idioms了,正常审美观的人不会认为把数据和函数指针放在一个struct里面模拟数据抽象比C++的方式好。

C++在某些方面,甚至比人们想象的更好,比方说因为RAII的存在,C++里面的异常安全要比其他语言容易一些,正是因为这样,C#引入了using
(){}这样的形式,Java引入了try-with,Python加入了with,这都是学习C++的RAII,但无一例外比C++的要差。

当然,C++也有一些问题,比如标准库不够好,没有memory
model,一些语言特性不够明确,比方override不是明确的,而C#就以override关键字明确了其行为,异常不够好用,没有语言级别的stacktrace等等。但在这些缺点上,C总是比C++走的一样远,如果不是更远的话。
全部回答
  • 1楼网友:拜訪者
  • 2021-11-17 05:18
一个软件系统,若能用C 语言完成,当然未必需要改用 C++来写。
因为 C++通常写起来很繁琐,例如,读入一行数据,含字符,含数字,含空白,C 语言用 fgets() 或 gets() 就可以了,c++ 用 cin 的 getline 也可以实现。但 循环 读一行,读一行..., 用c++很多人 就会出错,用c 就不会出错。格式化读写,(例如跳过什么,找到什么位置,读一个8进制或16进制或10进制数据) 也是C 语言简洁,不易出错,c++很繁琐。
再有例子,画3维动态图形(animation),C 调用 GLUT工具包很简单,c++, MFC 调用 openGL 很繁琐。
再一个重要因素是 软件移植,不同平台间的移植,C语言兼容性强,c++通常不兼容。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯