今天C ++的作用是什么?


41

目前,我是一名IT学生,我想知道当今C ++中仍然重要的是什么,它的用途是什么?我在大学里完成了基础C ++课程,但是我无法想象我可以在哪里使用我的知识以及应该朝哪个方向学习C ++。

换句话说,我应该学会成为一名成功的C ++程序员?

目前,我正在学习Java只是因为我不清楚C ++在当今哪个领域有用,但是我清楚地知道作为Java程序员我将从事哪种工作。但是我仍然希望C ++不会死。


2
这是我的观点。C ++在实时情况(和视频游戏)中非常有用。由于性能原因,我还将C ++用于桌面应用程序(不要忘记Qt)。
hosomaki 2011年

1
@stign IMO可能最终会死掉,因为今天可能会出现所有语言都过时的时代(可能是由于所使用的硬件发生了巨大变化)。
肯尼思

17
C ++远未结束(我每天都在其中编写新代码),并且如果有COBOL的指示,我将从事很多很多年的工作。
Michael Kohne

2
看看The Programming Languages Beacon并得出自己的结论:lextrait.com/vincent/implementations.html
Nemanja Trifunovic

1
最近,我在Microsoft的9频道上观看了一些有趣的视频。微软已经在市场研究上花费了数百万美元,基于它的研究,它正在谈论C ++的复兴。观看此视频
grokus 2011年

Answers:


57

C ++的杀手级功能是范围绑定资源管理 SBRM(通常称为“ RAII ”)。它是围绕此概念构建的唯一工业编程语言。在C ++中,所有对象的生命周期都是确切已知的,并且(编写良好的)C ++程序可确保以完全确定的方式获取和释放资源。相比之下,垃圾收集或以其他方式管理的语言不提供任何此类保证;实际上,这些语言的对象可能会在其生命周期结束后继续存在。

这就是为什么将C ++用于金融,视频游戏,高性能嵌入式和实时系统,运输,制造以及其他对确定性和精度至关重要的行业的原因。没有其他选择。

当然,它用于执行更多的任务,并且这些任务已丢失给C#和Python和其他更合适的语言,但这并不影响其核心市场。


20
在C ++中使用malloc的任何人,我都想用一个硬对象击中他们的头。同样,new在C ++ 中,运算符还有一个鲜为人知的功能,称为放置。它允许重用当前占用的内存空间。因此,如果有人想避免(或最小化)碎片,那么从理论上讲可以做到。可预测性与确定性并不相同。
陶Szelei

4
@Apalala C ++也具有引用计数,但是就对象生存期管理而言,它比SBRM差得多。我不仅谈论硬RT确定性,还在谈论对象模型的确定性行为。
Cubbi 2011年

4
当我学习C ++时,RAII并不广为人知。我学习了新的和删除以及基于大脑的指针管理。因此,我认为您不能将其描述为“围绕概念构建”。今天使用的库和其他支持结构可能具有,但没有核心语言或语法。
jprete 2011年

7
@jprete确实,许多C ++的优势是被发现而不是被设计的。这篇文章是关于2005年以后的语言的。
Cubbi 2011年

5
RAII 设计为C ++。但是大多数C ++程序员只是继续写C,用new替换malloc并用delete替换free。
凯文·克莱恩

40

C和C ++有一些市场(尽管我了解有限)

  1. 现有代码。C和C ++拥有一些最大的现有代码库。不能仅仅因为“下一个热门新语言”的出现就扔掉了这么大的代码。在大多数平台上,C绑定几乎是语言间交互的标准,因此能够(至少)使用C或C ++编写包装器库非常有用。
  2. 高性能应用程序(例如高频财务)。与大多数其他编程语言相比,C和C ++仍具有更好的整体性能。在C ++中,最重要的是,通常使用仅编译器之类的东西(例如模板)来构建抽象,从而将计算从运行时转移到编译时(使整个应用程序更快)。
  3. (类似于2)低延迟应用程序。根据应用程序的不同,在CLR或JVM等语言上运行的语言通常可以与C ++一样快,但是在程序可以执行之前,仍然需要将CLR或JVM自身加载到内存中。如果您有严格的启动要求,那么这很重要。从评论中进行编辑:出于此原因,此处对任何描述的硬等待时间要求都非常重要。在虚拟机上运行的语言很少提供时间限制,因为运行例如垃圾回收不是确定性的过程。
  4. 嵌入式系统。某些嵌入式系统具有运行的硬件,例如JVM(Google的Android(好的,它不是真正的JVM,但是已经很接近了),RIM的Blackberry)或CLR(Windows Phone),但是大多数嵌入式系统没有能力运行运行比C或C ++需要更多运行时支持的语言(几乎根本没有运行时支持)。
  5. 部署受限的应用程序。如果您的整个程序只有几百个KB,有时需要安装JVM或CLR会显得过大。(例如,我从事的大多数程序都必须作为一个.EXE文件部署,而没有任何类型的安装程序或类似的程序;为此,没有其他选择)

2
启动延迟不是唯一需要考虑的延迟:严格的实时需求可能会成为更大的难题。
greyfade11年

1
添加任何您不想被某个特定制造商(C#或Objective-C)或不想让您的语言消失于一堆诉讼(Java)中的内容
Martin Beckett

@greyfade:这就是我所说的(2)的意思,但是我同意不清楚。编辑。@Martin:虽然我认为这对C ++很有好处,但我认为它不能回答问题-C ++的市场广泛使用。同样,当存在<S> BSD </ S>(OOPS:这是LGPL)许可的CLR版本(单声道)时,我不认为我将C#锁定到特定制造商。
Billy ONeal

1
另外5.操作系统和核心框架。您可以在虚拟机上做很多事情,但是虚拟机仍然必须用C和/或C ++实现。
Jan Hudec

1
@Jan:是的。诸如反思和朋友之类的事情会引发问题2-4。您真正需要编写垃圾收集器的唯一子集将是一些代表物理内存的对象。
Billy ONeal

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.