若是手头有一个强大的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 ++容许以较小的片断来破坏程序,从而能够进行更精细的测试和/或经过不一样的横截面而不只仅是层。测试是现代敏捷开发的基础。缺少测试一般源于不良的测试能力,阻碍了开发,阻碍了重构并鼓励了技术债务的积累。3d
C的局限性倾向于令人们倾向于使用特定的分层代码。某些类型的抽象没法表达,所以位最终散布在代码库中并被复制。没有办法将它们做为功能实体一块儿进行测试。只要新功能适合现有体系结构,一切都将适中。当须要进行一种颠覆内部层次结构的变革时,这确实使人痛苦。有不少代码重写,包括测试。风险很大。
总结一下,C ++具备许多小而强大的功能,这些功能累计会带来巨大的不一样。它们中的许多易于掌握,能够在现有的C代码库中使用。其余可能在重构或技术债务清除期间添加。甚至元编程也能够逐渐丰富相似C的代码。