Java程序员如何高效而优雅地入门Cpp,由于工作需要,需要用C++写一些模块。关于C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 我也算是老手,但也还需要心生敬畏,本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ 。Java是为了就业,C++ 是信仰。(C++ 是教学、信仰、商业这三个原本互斥的概念(这三个概念也是三个阶段,正好可以陪我们一起成长)的偏偏集合体)。
关于C类语言的基本思想,可以为学习C++ 定下基调。下面通过斯特鲁普(C++发明者)对Java程序员的字字珠玑的建议,再加上我的理解和总结,列出几点“中心思想”。不要试图用C++ 来编写Java程序。不能依赖垃圾收集器了。同为面向对象语言,但要采用C++ 自己的抽象机制【类和模板】。
要理解C++ 与C语言是各个方面都不同的程序设计语言(虽然最早C++ 是作为“带类的C”出现的),不要因为虚假的熟悉感而将代码写成C。
C++ 标准库很重要很高效,要非常熟悉。
C++ 程序设计强调富类型、轻量级抽象,希望能细细体会。
C++ 特别适合资源受限的应用,也是为数不多可以开发出高质量软件的程序设计语言。
C++ 的成长速度很快,要与时俱进。
一定要有单元测试和错误处理模型。
C++ 将内置操作和内置类型都直接映射到硬件,从而提供高效内存使用和底层操作。
C++ 有着灵活且低开销的抽象机制【核心掌握】(可能的话以库的形式呈现),而不是简单的如Java一样上来就给所有类创造一个唯一的基类。
尽量不使用引用和指针变量,作为替代,使用局部变量和成员变量。
使用限定作用域的资源管理。
对象释放时使用析构函数,而不是模仿finally:避免使用单纯的new和delete,应该使用容器(例如vector,string和map)以及句柄类,(例如lock和unique_ptr)使用独立函数来最小化耦合,使用命名空间来限制独立函数的作用域。
不要使用异常规范。
C++ 嵌套类对外围类没有访问权限。C++ 提供最小化的运行时反射:dynamic_cast和type_id,应更多依靠编译时特性。零开销原则,必须不浪费哪怕一个字节或是一个处理器时钟周期(C++ 是信仰)。
C++ 是系统程序设计语言(例如驱动程序、通信协议栈、虚拟机、操作系统、标准库、编程环境等高大上有技术深度的系统),而Java是业务开发语言(例如XXX管理系统,电商网站,微信服务号等基于B/S架构的上层UED相关的应用),高下立判(鄙视链是有道理的)。
学习C++ 最重要的就是重视基本概念(例如类型安全、资源管理以及不变式)和程序设计技术(例如使用限定作用域的对象进行资源管理以及在算法中使用迭代器),但要注意不要迷失在语言技术性细节中。
学习C++ 一定要避免深入到细节特性中去浪费掉大量时间,了解最生僻的语言特性或是使用到更多数量的特性并不是什么值得炫耀的事情,尚学堂•百战程序员陈老师指出学习C++ 细节知识的真正目的是:在良好设计所提供的语境中,有能力组合使用语言特性和库特性来支持好的程序设计风格。
所以,使用库来简化程序设计任务,提高系统质量是非常必要的,学习标准库是学习C++ 不可分割的一部分。(遇到问题先找库,这一点我想每个Java程序员骨子里都是这么想的,不会钻到细节中去。)领悟编程和设计技术比了解所有细节重要的多。而细节问题不要过分担心,通过时间的积累,不断的练习自然就会掌握。
Java程序员如何高效而优雅地入门Cpp,C++ 除了标准库以外,有大量的标准库和工具集,现在有数以千计的C++ 库,跟上所有这些库的变化是不可能的,因此还是上面那些话,要通过组合使用个语言特性以及库特性来支持好的程序设计风格,所以熟悉这些库的领域(不必钻进去一一研究)以及领悟编程设计技术才是核心点。