[c++] C ++能做什么,在其他语言中太难或杂乱了?


7 Answers

RAII /确定性定稿 。 不,当你处理稀缺的共享资源时,垃圾回收并不是那么好

不受限制地访问OS API

Question

我仍然觉得C ++提供了一些不能被打败的东西。 这不是我打算在这里开始一场激烈的战争,如果你有强烈的不喜欢C ++的意见,不要在这里发泄。 我有兴趣从C ++大师那里听说为什么他们坚持使用它。

我特别感兴趣的是C ++方面的知之甚少或未充分利用。

编辑: 人们,请至少粗略阅读其他答案,以确保您不会重复已经说过的内容,如果您同意其他人的说法,请立即行动起来!




确定性对象破坏导致一些宏伟的设计模式。 例如,虽然RAII并不像垃圾收集那样普遍,但却带来了一些GC所不具备的令人印象深刻的功能。

C ++也是独一无二的,因为它有一个图灵完整的预处理器。 这样可以让你更喜欢(正如延迟的反面)大量的代码任务来编译时间而不是运行时间。 例如,在真实的代码中,你可能有一个assert()语句来测试一个永远不会发生的事情。 事实是,它迟早会发生......而且在你休假的时候就在凌晨3点发生。 C ++预处理器断言在编译时进行相同的测试。 编译时断言在上午8点到下午5点之间失败,而您正坐在电脑前观看代码构建; 当你在夏威夷睡觉时,运行时间断言在凌晨3点失败。 在那里看到胜利是相当容易的。

在大多数语言中,战略模式是在运行时完成的,并在类型不匹配的情况下抛出异常。 在C ++中,可以在编译时通过预处理器工具完成策略,并且可以保证类型安全。




内存布局,对齐和访问的绝对控制,当你需要它。 如果你足够小心,你可以写一些非常缓存友好的程序。 对于多处理器程序,您还可以消除来自缓存一致性机制的大量缓慢下降。

(好的,你可以用C,程序集,也可以用Fortran来做,但是C ++可以让你在更高的层次上编写程序的其余部分。)




说实话,如果你愿意编写足够的代码,你可以做任何事情。

所以要回答你的问题,不,用C ++不能做的另一种语言是无法做到的。 这是你有多少耐心,你是否愿意投入长时间的不眠之夜才能上班?

有一些东西,C ++包装使得它很容易做(因为他们可以读取头文件),像Office开发。 但是,这又是因为有人在RCW或“Runtime Callable Wrapper”中写了很多代码来“包装”

编辑:你也意识到这是一个加载的问题。




C#和Java强制你把你的'main()'函数放在一个类中。 我觉得这很怪异,因为这稀释了一个班级的意思。

对我而言,一个类是问题域中的一个对象类别。 程序不是这样一个对象。 所以在你的程序中永远不应该有一个叫做“程序”的类。 这相当于使用符号表示自身的数学证明 - 证明 - 代表数学对象的符号。 这将是奇怪和不一致的。

幸运的是,与C#和Java不同,C ++允许全局函数。 这可以让你的main()函数在外面存在。 因此,C ++提供了一个更简单,更一致,也许更真实的面向对象的习惯用法。 因此,这是C ++可以做的一件事情,但C#和Java不能。




严格控制系统资源(尤其是内存),同时提供强大的抽象机制。 在这方面,我所知道的唯一一种能够接近C ++的语言是Ada。




我想我只是要赞扬C ++使用模板来捕捉表达式并在需要时懒惰地执行它的能力。 对于那些不知道这是什么, 这里是一个例子。




从技术上讲,我觉得没有,真的!

我真的不认为有什么C ++可以做的D语言不能。 无论C ++具有什么样的能力,它总是比D或者其他语言更加困难和混乱。 即使像类声明这样简单的事情在C ++中比任何其他语言都更加困难和混乱。

C ++可以做的唯一事情就是与已经用C ++编写的数百万行代码兼容。
这是除C ++以外的其他语言所能做的唯一的事情:)




Related



Tags

c++ c++   unique