C++和其它语言的比较

参考阿秀的学习笔记

python

  • Python是一种脚本语言,是解释执行的,而C++是编译语言,是需要编译后在特定平台运行的。python可以很方便的跨平台,但是效率没有C++高。
  • Python使用缩进来区分不同的代码块,C++使用花括号来区分
  • C++中需要事先定义变量的类型,而Python不需要,Python的基本数据类型只有数字,布尔值,字符串,列表,元组等等
  • Python的库函数比C++的多,调用起来很方便

C

Effective C++条例01:将C++视作一个语言联邦

一开始,C++知识C语言上加一些面向对象特性(C with Classes)。
但是当这个语言日渐成熟,增加了更多概念,比如异常、模板、新的设计思考方式,STL……
如今的C++已经是一个多重范型编程语言,一个同时支持过程形式、面向对象、函数、泛型、元编程形式的语言。C++最主要的四个内容:

  1. C。区块、语句、预处理器、内置数据类型、数组、指针等都是C语言的内容。
  2. 面向对象:封装、继承和多态。
  3. 模板编程(泛型编程)
  4. STL

C++与C语言主要区别

  • C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。
  • 标准C++中的字符串类取代了标准C函数库头文件中的字符数组处理函数(C中没有字符串类型)。
  • C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。
  • C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。
  • 在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。也就是C++可以重载,C语言不允许。
  • C++语言中,允许变量定义语句在程序中的任何地方,只要在是使用它之前就可以;而C语言中,必须要在函数开头部分。而且C++不允许重复定义变量,C语言也是做不到这一点的
  • 在C++中,除了值和指针之外,新增了引用。引用型变量是其他变量的一个别名,我们可以认为他们只是名字不相同,其他都是相同的。
  • C++相对与C增加了一些关键字,如:bool、using、dynamic_cast、namespace等等

C++的类型安全

  • new返回的指针类型严格与对象匹配,而不是void*
  • 模板支持类型检查
  • const关键字代替#define constants,有类型和作用域
  • 一些define宏可以被改写为inline函数,结合函数重载,可以在类型安全的前提下支持多种类型
  • dynamic_cast关键字,使得转换过程更安全。

JAVA

语言特性

  • Java语言给开发人员提供了更为简洁的语法;完全面向对象,由于JVM可以安装到任何的操作系统上,所以说它的可移植性强

  • Java语言中没有指针的概念,引入了真正的数组。不同于C++中利用指针实现的“伪数组”,Java引入了真正的数组,同时将容易造成麻烦的指针从语言中去掉,这将有利于防止在C++程序中常见的因为数组操作越界等指针操作而对系统数据进行非法读写带来的不安全问题

  • C++也可以在其他系统运行,但是需要不同的编码(这一点不如Java,只编写一次代码,到处运行),例如对一个数字,在windows下是大端存储,在unix中则为小端存储。Java程序一般都是生成字节码,在JVM里面运行得到结果

  • Java用接口(Interface)技术取代C++程序中的抽象类。接口与抽象类有同样的功能,但是省却了在实现和维护上的复杂性

垃圾回收

  • C++用析构函数回收垃圾,写C和C++程序时一定要注意内存的申请和释放
  • Java语言不使用指针,内存的分配和回收都是自动进行的,程序员无须考虑内存碎片的问题
为什么C++没有垃圾回收机制
  • 首先实现一个垃圾回收器会带来额外的空间和时间开销。需要开辟一定的空间保存指针的引用计数和对他们进行标记。然后需要单独开辟一个线程在空闲的时候进行free操作。
  • 其次,垃圾回收会使得C++不适合很多底层操作(垃圾回收器需要扫描内存中的所有对象以判断其是否需要回收,因此,在处理大量数据或需要对内存进行微调的底层操作时,垃圾回收机制的效率可能不够高。此外,对于实时性要求高的应用,如实时视频、音频等,程序员需要更精细地控制内存分配和释放,以满足实时性需求)

应用场景

  • Java在桌面程序上不如C++实用,C++可以直接编译成exe文件,指针是c++的优势,可以直接对内存的操作,但同时具有危险性 。(操作内存的确是一项非常危险的事情,一旦指针指向的位置发生错误,或者误删除了内存中某个地址单元存放的重要数据,后果是可想而知的)
  • Java在Web 应用上具有C++ 无可比拟的优势,具有丰富多样的框架
  • 对于底层程序的编程以及控制方面的编程,C++很灵活,因为有句柄的存在

Go

内存管理

C++需要手动分配和释放内存,而Go使用垃圾回收机制自动管理内存。这使得Go比C++更安全,更不容易出现内存泄漏和其他内存相关问题。

性能

C++是一种非常高效的编程语言,因为它允许对内存进行精细控制,可以进行底层操作。然而,Go具有很好的并发性能和支持原生的协程,对于I/O密集型的应用程序来说非常高效。

语言特性

C++具有许多高级的语言特性,如模板、多重继承、函数重载等,这允许程序员编写复杂的应用程序。而Go则专注于简单和易用性,并提供强大的并发特性,例如goroutines和channels。

库支持

C++具有丰富的库和生态系统,可以用于开发各种应用程序。Go也有一个活跃的社区和库,但是较C++来说要少一些。

综上所述,C++和Go之间的比较主要取决于所需的功能、应用场景和团队的技能水平。C++是一种非常强大和灵活的编程语言,专注于高性能和底层操作,适用于系统级编程和性能要求较高的应用程序。而Go则专注于简单、易用和并发性能,适用于开发网络应用程序和分布式系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值