如果手头有一个强大的C ++编译器,切勿使用C。
如果需要,可以使用禁止C ++的所有功能的编码约定,包括标准C ++库,异常,RTTI以及C ++符号修饰。
但是,C ++具有许多可以编写代码的功能,更具可读性…无需额外费用,更易于维护……无需额外费用,运行更快……无需额外费用,开发速度更快……无需额外费用,可以扩展并开放以进行关键更改……无需额外费用。
所谓成本,是指运行时性能,可执行文件大小和内存使用情况。但是,如果您愿意做出一些取舍,事情可能只会变得更好。
一些细节:
1.在最基本的层次上,可以从更丰富的语法和关键字中受益。如auto,decltype,typename,using。在正确的上下文中嵌套信息。使用名称空间,限定常量,类型名和嵌套的typedef。其中许多也涉及。还有一些语言功能可以消除C语言的冗长和晦涩:闭包vs f(void *),模板函数vs宏。
2.C程序是水平层,一层在另一层之上,抽象是一个void *。相同的信息需要反复编码,然后所有方面都反映了如何在一个方面实施这种更改。在C ++中,可以一次定义信息并将其传播以创建数据类型,匹配生产代码以及诊断所有这些维护类型安全且无运行时开销的信息。可以轻松编写通用代码。由于重载,模板功能和类型特征,可以在不同的上下文中重用功能较小或较大的代码块,并可以任意组合。
仅从智能宏起使用模板功能可以使您受益匪浅。然后使用RAII再也不会遇到相同的“忘记在返回路径上放下锁”了。元编程将帮助您生成编组或诊断代码等。这些都不需要异常或C ++ lib或接触面向对象的编程。
这里有一个提示:C ++库之外的许多工具实际上不需要链接到C ++库二进制文件。C ++编译器能够生成更好的优化代码的原因很多。强类型系统(查找强别名),使用const类型和const表达式。然后,用作智能宏的模板函数可以消除循环,并且许多元代码可以解析编译时和实际调用中的条件。
在不同的上下文中再次重用通用代码的能力意味着更少的代码编写。C ++允许以较小的片段来破坏程序,从而可以进行更精细的测试和/或通过不同的横截面而不仅仅是层。测试是现代敏捷开发的基础。缺乏测试通常源于不良的测试能力,阻碍了开发,阻碍了重构并鼓励了技术债务的积累。
C的局限性倾向于使人们倾向于使用特定的分层代码。某些类型的抽象无法表达,因此位最终散布在代码库中并被复制。没有办法将它们作为功能实体一起进行测试。只要新功能适合现有体系结构,一切都将适中。当需要进行一种颠覆内部层次结构的变革时,这确实令人痛苦。有很多代码重写,包括测试。风险很大。
总结一下,C ++具有许多小而强大的功能,这些功能累计会带来巨大的不同。它们中的许多易于掌握,可以在现有的C代码库中使用。其他可能在重构或技术债务清除期间添加。甚至元编程也可以逐渐丰富类似C的代码。