C++语言是否跨平台?

开发 后端
C++语言是一个国际标准,要在C++中加入这些语言之外的、面向应用的特性还需要很长一段路要走,好了下面进行详细说明。

Java的程序如果想要运行,必须在虚拟机上运行的,而C++语言不是,C++程序的代码是直接运行在物理机器上的,所谓的C++语言:是一种使用非常广泛的计算机编程语言。。

C#更像是微软公司和SUN公司进行商业斗争的产物。历史上,微软公司是支持过Java语言的,代表性的产品有Visual J++和WFC。后来因为众所周知的原因,微软公司推出了C#,其目的很明确,就是和Java竞争。

实际上C#和Java在特性上也非常类似(不仅仅是语法)。二者都是为了更加方便地解决应用问题,在GUI、数据库访问、网络通信、多线程等和实际应用密切相关的点上都有成熟的解决方案。

C++更多地靠第三方的库来实现这些功能,因为C++语言是一个国际标准,要在C++中加入这些语言之外的、面向应用的特性还需要很长一段路要走。而C#、Java的拥有者是商业化公司,各种动作自然要敏捷得多。

但是这并不意味着C++即将消亡(这样的言论很多)。不可否认的是C++在C#、Java的进攻下,丢失了一些领域,但是C++仍然在普遍使用,很重要的原因就是因为C++既保持了C语言级别的效率(某些情况下例外),又加入了面向对象的特性。

C++与其他语言的主要区别

总的来说,C++和C#、Java的区别集中在以下几点:
(1)C#、Java代码编译后(形成中间代码)是在虚拟机上执行的。C++则不是。

(2)C#、Java语言相对于C++语言来说较为简单,比较容易上手。C++的语法特性多、复杂,较难掌握。

(3)C++语言本身是一个标准,各种实现之间有区别,对标准的理解、执行程度也不同。而C#、Java语言是由商业公司掌握的,在这方面很少有问题。

(4)C#、Java是直接面向应用的,各种标准、模型都很成熟。而C++的各种库在不同的C++编译器实现上可能遇到一些问题。

(5)三者都是面向对象的。C#、Java比C++更为彻底一些。有观点认为C#、Java是彻底地面向对象的语言,这种说法不妥,因为对于面向对象的语言,并没有一个特定的标准,例如也有观点认为最近很流行的Ruby语言比C#、Java更加面向对象。

(6)C++拥有很多现代的、令人激动的语言特性,例如模板、泛型编程等。在这一点上,C#和Java也在迅速跟进。C++是一门精致的、艺术的编程语言。笔者认为,C++也是所有已知程序设计语言中最灵活、最难学的语言之一。学好C++基本上也意味着可以学好任一种其他的高级程序设计语言。图1.1对C、C++、C#、Java这4种语言的几个方面做了比较。

首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制。

甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。

底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。即便是C++的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。

值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++语言,并为之找一堆理由。

我假定你不是这样的人。不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。

当然,到现在你可能还是会说。我还是不用C++语言,因为我可以用D;或者如果你本来做的项目就不需要C++,你则可能会说,我用Python。首先,如果你的项目能用Java/Python乃至Ruby做,那么用C++是自讨苦吃。

因为能用那些语言代表你的项目在效率上本身要求就不高,那么用一门效率上讨不到太大好处,复杂性上却绰绰有余的语言,有什么价值呢?其次,如果你的项目效率是很重要的,你可能会说可以用D。

然而现实是D在工业界尤其是国内被运用得非常少,几乎没有。而C++语言却有大量的既有代码,已经使用C++去做他们的产品的公司,在很长一段时间之内几乎是不可能用别的语言重写代码的,正如Joel所说,决定重写一个非平凡的代码基==自杀。

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法
责任编辑:chenqingxiang 来源: 计世网
相关推荐

2010-02-24 09:45:10

Linux CC++

2010-02-01 10:43:10

C++跨平台应用

2022-04-22 15:06:59

C++PythonJava

2010-01-15 17:38:37

C++语言

2021-05-07 08:00:19

应用程序框架

2010-01-14 10:23:08

C++语言

2010-01-26 10:27:43

C++语言

2010-01-13 17:04:36

C++语言

2022-04-18 12:29:18

C++

2010-01-14 10:34:02

C++语言

2021-03-30 11:33:03

C语言头文件开发

2010-01-15 14:46:20

C++语言

2010-01-21 16:08:26

C++语言

2010-01-18 16:27:26

C++语言

2010-01-22 15:30:36

C++语言

2010-01-18 09:39:25

C++语言

2010-01-14 17:02:10

学习C++

2010-01-15 10:22:24

C++语言

2021-04-08 11:10:07

C语言版本Cmake

2010-01-14 09:27:44

C++语言
点赞
收藏

51CTO技术栈公众号