C ++在最近几年得到了巨大的发展,但仍然被许多人视为2000年代初的语言。 让我们消除一些神话……
C ++是一种濒死语言
C ++实际上正在增长! 即使计算机变得越来越快,我们对它们要做什么的要求也在不断增加。 C ++是使我们能够最大程度地发挥硬件潜力的少数语言之一。
CPP Con的Stroustrup的演讲显示了C ++的发展轨迹。
C ++冗长且无用
使用新的auto
关键字和lambda语法,C ++可以是正确,快速且简洁的。
例如,比较JavaScript和C ++ 14中的这两个程序:
好的,所以C ++会稍长一些,但是请考虑一下您得到的回报:
- 强类型系统和编译时类型检查
- 没有像Node.js这样的运行时依赖项
- 执行时间的分数
C是C ++的子集
尽管通常可以在C ++中包含C代码,但并非总是如此。 以下代码段是有效的C,但不是有效的C ++:
您需要了解C才能了解C ++
C ++是自己的语言,具有自己的习惯用法和最佳实践。 如果您仅学习C ++作为C的扩展,那么您将不会学习这些模式,并且可能编写容易出错的代码!
凯特·格里高利(Kate Gregory)对此进行了精彩的演讲,这很值得您花时间。
有多少开发人员因为被教导像C一样使用C ++而对C ++产生了负面的体验?
C比C ++快
C ++允许您编写可编译为等效C的抽象。这意味着,一定要小心,C ++程序的运行速度至少与C程序一样快。 与C相比,C ++的优势在于它使我们能够使用模板,OOP和功能组合来构建可重用的抽象。
C ++为您提供了在类型系统中编码意图的工具。 这使编译器可以从您的代码生成最佳二进制文件。
C ++不是跨平台的
C ++ 语言是完全跨平台的。 许多人声称不是C ++的原因是,标准库没有为Java,Java等语言提供文件系统,网络访问等平台抽象。
相反,C ++要求您使用库或编写自己的库。 这似乎很痛苦(尽管使用包管理器要痛苦得多),但这实际上是一件好事。
- 为了面向新平台,编译器实现者的实现量较少。
- 功能有限的平台目标可以支持C ++。 如果该标准要求平台由于硬件限制而无法提供某些功能,将会发生什么?
- 您可以自由选择最适合您的应用程序的库。 这不是一种适合所有人的尺寸。
apt-get是C ++的软件包管理器
我们在上一篇文章中介绍了这一细节,但简短的版本是:
-
apt-get
仅适用于Debian变体 -
apt-get
更改您的系统,这在项目之间切换时很不方便 -
apt-get
不是新版本和实验版本库的好来源
C ++与类有关
早期,C和C ++之间的最大区别是C ++提供了类。 事实仍然如此,但是类不再是C ++的主要功能。 在现代C ++中,重点是RAII模式。 C ++并非真正与类有关,而与确定性资源管理有关。
垃圾回收对于可靠的软件是必需的,因此C ++对大型项目不利
C ++资源管理(内存只是其中一种)的方法是使用RAII模式而不是集中式垃圾收集器。
这有点像其他语言中的“使用”模式。 例如,在C#中,我们可以这样写:
在C ++中,处置应由析构函数完成:
请注意,这实际上并不那么冗长。 另外,我们可以对内存和其他资源使用相同的模式。
但是还有另一个优点:对象处置的顺序和时间由其使用范围决定。 这使得可以在功能级别上控制垃圾回收过程,而大多数垃圾回收语言仅允许( 有限 )全局级别的控制。
在大型项目中,这是更大的好处,因为它可以防止一个模块将垃圾回收延迟引入另一个模块。 这就是为什么C ++是游戏开发和音频处理的首选语言的原因。
为了提高性能,您必须编写低级代码
C ++编译器在优化高级代码方面做得非常出色。 这样,您就可以避免编写低级的文字,同时还能获得出色的性能。 有时性能甚至会更好,因为编译器可以执行优化,而手工编写将非常棘手。
我们最喜欢的示例是使用我们的新C ++序列库Conduit 。 该程序使用lambda,协程等来计算各种斐波那契数的总和:
但是它编译为:
这意味着优化器能够计算60个斐波纳契数,并在编译时求和最后50个!
既然你在这里...
我们最近发布了BuildInfer ,这是一种用于优化C / C ++构建脚本的新工具。 看一看 !
From: https://hackernoon.com/common-misconceptions-of-c-4f49f36b92a