首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++能做什么呢?

C++能做什么呢?
EN

Software Engineering用户
提问于 2014-12-03 05:44:18
回答 2查看 14.1K关注 0票数 3

我读了这篇文章:http://www.quora.com/What-are-the-advantages-of-Python-over-C++

我想知道这个问题的反面: C++能做什么?

例如,在性能图形和GUI方面:我知道C++将是一种更好的高端游戏开发语言,它需要精美的图形和出色的性能,但就制作GUI而言,我不理解使用C++和QT或选择PyQt之间的具体区别。

如果有人能像这样逐点快速地进行分析(例如,GUI、高性能图形、构建命令行工具、并发性等等),我将非常有帮助决定是为我的下一个编程项目选择C++还是Python。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-12-03 08:55:02

Python是一种动态类型的语言。这有两个重要后果:

  • 编译器无法在编译时拒绝某些由C++编译器捕获的逻辑错误。
  • 由于某些(甚至大多数)变量的类型无法在编译时确定,因此必须通过动态分配方法调用(相当慢的操作)来实现对这些变量的操作,而C++编译器通常能够生成内联代码(没有开销)。因此,C++本身就是一种更快的语言。

前者实际上是非常有用的。例如,请参阅Boost unit库,该库允许编写科学和工程代码,允许编译器静态地检查计算在编译时是否具有逻辑一致的单元使用情况,而不需要运行时开销。这在Python中是不可能的。

Python对多线程的支持也很差。它的语言设计需要某些操作(例如对列表的修改)才能自动完成,这导致使用全局锁防止两个线程同时执行Python代码(虽然一个线程调用本机代码,另一个线程调用另一个线程),因为锁定和解锁单个对象的开销使单个线程的性能非常糟糕。

另一方面,C++将确保代码线程安全的工作留给了开发人员,这就允许高效的多线程处理。

C++还为开发人员提供了对内存管理的更多控制,例如允许泛型容器在其结构中分配用户指定的对象类型(这将导致比使用Python更低的开销和更好的引用局部性),在指定的内存区域中分配对象(例如,可以在单个操作中删除多个对象,或者在内存映射的文件中分配对象),或者使用开发人员提供的自定义分配程序。

C++也是松散类型的,这意味着您可以对一种类型的数据使用内存区域,然后将其视为包含另一种类型的数据。虽然这种类型的操作是危险的(而且语言规范规定这样做的程序具有“未定义的行为”),但是如果您知道正在做什么,您可以使用它来实现代码模块的动态加载、运行时本机代码生成、直接操作文件结构而不像Python中那样单独提取字段,以及各种各样的其他用途。这就是为什么操作系统可以用C++而不是Python实现的原因。

票数 9
EN

Software Engineering用户

发布于 2014-12-03 05:55:56

需要实时数字处理的程序(如数字音频工作站或视频播放器)具有我所称的“计算阈值”。这意味着,当没有足够的硬件马力来满足必要的计算负载时,编程语言的选择可能很重要,如果语言本身消耗了CPU时钟周期的很大一部分。换句话说,如果您的语言不够高效,应用程序可能根本无法工作。

因此,语言的选择取决于是否存在这样的阈值。当然,如果您用一种高效的语言(如C++ )编写功能视频播放器,那么您将有更好的机会编写它。权衡是,您通常会编写更多的代码(而且编写起来需要更长的时间),但是对于像视频播放器这样的应用程序来说,情况通常是这样的。

对于具有基于表单的GUI的业务应用程序,python通常被选中而不是C++,因为一般来说,python允许您在更高的抽象级别上进行编码,并且与C++相比具有更少的智能障碍。因此,更快的原型制造成为可能。

当然,这些都是广义的,您的里程可能会因处理器的速度、可用内核的数量、已安装RAM的大小、是否将python交叉编译为C等因素而有所不同,因此无法预测应用程序使用哪种语言。就像所有与性能相关的事情,衡量,不要猜测。

票数 13
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/264413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档