到现在,我觉得终于找到学习和使用C++的基本原则了——务必简单。将其看成一个带类的C,或者将其看做标准库下的C++。
C++太复杂——其实这种复杂性,所有语言都有,只是多数语言都隐藏了这种复杂性,只有你去努力找,才能找到操作复杂性的方法。而C++,试图将所有复杂性展现在所有人面前,包括初学者。有人比喻,如果语言是一件工具,一般语言就是刀子、叉子啥的,而C++就是一把瑞士军刀。
(图片来自https://gameinstitute.qq.com/community/detail/104649)
MFC啥的都应该被扔进垃圾桶,它几乎将C++的复杂推向极致。几乎没有人不吐槽MFC,而且也没有几个人真正使用MFC,即使在微软内部也是这样。哪些设计MFC的大牛们,肯定反省过很多次了,很多年了。
模板和泛型是C++的高级功能,也挺复杂的。对比C#的泛型,C++更自由,但是不能做语法检查。。。有点像宏定义,或者就是大牛们当时从宏定义得到的灵感。泛型是个好东西,相对于非泛型,不会牺牲性能。但是对于初学者,窃以为不要尝试自己去写模板,能够理解,使用STL中的泛型结构就可以了。
跨平台是个很有吸引力的概念,但是对于C++来说,即使是只使用标准库,Windows下能跑的C++代码,在Linux上也不一定能跑,还是要一堆条件编译来处理平台差异。在这个方面,C语言本身貌似有更好的表现,以至于连Linux之父都不喜欢C++。
自己处理内存是个劳神费心的事,编写业务逻辑的时候,还要处处防范内存问题,不留意就会出现一个大坑。
图像处理、游戏引擎貌似是C++的主场,暂时还没有什么可以替代的,这算不算好消息?
无论如何,该骂骂,C++该用还得用,只是,要务必简单,尽量不要使用复杂的技术,更不要自己增加复杂性。。。