C++的初衷1)C++早期的很多工作都是为了强化和净化C,完全兼容C是硬性要求。C89和C99中的许多改进都是从C++引入的。可见Stroustrup对C语言的贡献是非常大的。不管你今天怎么看C++,C++确实对C进行了扩展和演进,对C产生了深远的影响。2)在C++兼容C的过程中,遇到了很多设计和实现上的麻烦;保守的K&RC程序员批评Stroustrup。很多人说C++的噩梦就是要兼容C,这不无道理(Java比C++彻底得多),但这不是Stroustrup考虑的。Stroustrup一方面努力兼容C,另一方面拼命优化C。3)C++最好的竞争对手是C,他的目的是——C能做的,C++也必须做,并且做得更好。你认为它完成了吗?有多少人达到了,有多少人没有?4)对于同时关注运行效率和开发效率的程序员,Stroustrup一再强调C++的目标是“加强程序的组织性,同时保证效率与C语言相当;能保证功能相同的程序,C++更短”,这就是浅封装的核心思想。而不是过渡设计OO。(参见:面向对象是个骗局)5)《C++演化和设计》本书中有很多例子来回应那些批评C++运行性能问题的人。在它的第二个版本中,C++引入了虚函数机制,这是C++最高效的瓶颈,但是我个人认为虚函数多了一个加法运算,但是它让我们的代码有了更好的组织,大大增加了读取程序并降低维护成本。(注:李普曼的《深入探索C++对象模型》也说明了C++的性能并不比C程序低。布鲁斯的?也说C++和C的性能差异只有5%)6)这本书也讲了一些C++的痛苦交易-offs,印象最深的就是多重继承,提出,去掉,再提出,重复了很多次,大家在得失之间不断地争论和取舍。这个过程我最大的收获是——a)任何设计都有好的设计和坏的设计,我们只能专注于一方面;b)完全否定的批评是一种不好的态度,而好的态度应该是批判性的建设。C++有多少陷阱?我个人觉得C++坑的地方不多,因为C++太灵活了,想怎么弄就怎么弄,所以各种不经意的滥用和胡闹。有些人没有学好C和C++,大部分人都是用C++写C的,所以把C和C++的坑合并了。如果你能花两到三周的时间读完《Effecitve C++》中的50多个子句,你就会知道C++的陷阱并不多,而且有很多子句告诉我们C++是如何解决C的陷阱的。那么,你可以阅读《Exceptional C++》和《More Exceptional C++》,了解C++各种问题的解决方法和一些常见的经典错误。C++在解决了C语言的很多缺陷的同时,也引入了一些因为OO和泛型的缺陷。去掉一些,加一些,个人感觉一般只比C多10%左右。但是您将获得500%的好处:更快的开发、更易读的代码和更容易的可维护性。C++编译有标准C++的不同实现,支持的地方千差万别,所以会出现一些奇怪的问题,但是如果你一般使用C++的封装、继承、多态、命名空间、const、refernece、inline、temple、overloap、autoptr,还有一些OO模式,不会出现奇怪的问题。至于STL的各种坑,我觉得还是程序员对GP(genericprogramming)了解不够。STL是泛型编程的最佳实践!属于大师之作,一般人很难看懂。必须承认,STL写出来的代码和编译错误确实是相当的复杂和晦涩,太难理解了。这也是对C++的批判。C++是一种可怕的语言,甚至比许多不合??格的程序员都在使用它更可怕。很多编程高手对C++都有情绪波动:先是喜欢死了,后来又恨死了,最重要的是又爱又恨。他们爱的是这种语言,恨的是许多不合格的人在滥用和侮辱它。C++未来的C++语言发展大致可以分为三个阶段(来自维基百科):***阶段:在这个阶段,C++语言基本上是传统类型上的面向对象语言,效率接近C语言,在工业界应用广泛。全球使用的开发语言占有相当大的份额;第二阶段:这一阶段,由于标准模板库(STL)和后来的Boost等库的出现,泛型编程在C++比重中占据越来越大的比重。当然,与此同时,由于Java、C#等语言的出现以及硬件价格的大幅下降,C++也受到了一定的冲击;第三阶段:以Loki、MPL等库为代表的生成式编程和模板元编程的出现,C++达到了发展史上的又一个新高峰。这些新技术的出现以及与原有技术??的融合,使得C++成为当今主流编程语言中最复杂的一员。《Why C++? 王者归来》中提到,性能主要是省电,省电就是省钱。在数据中心不明显,但在手机端比较明显。这就是Android支持C++的原因。因此,在NB电池或能源出现之前,如果需要关注程序的运行性能和开发效率,更关注程序的运行性能,那么应该安装C++。这就是iOS开发也支持C++的原因。今天的C++11不仅有更多更好的东西,也填补了原来C++更多的坑。综上所述,C++并不完美,但学习C++一定会让你受益无穷。正是那些想要快速编程体验的不合格程序员,让C++变得更加困难。
