先把C语言搞扎实(这会逼着你把很多基本的计算机问题弄清楚),虽然C++的上限非常高,但是分阶段性逐步学习是没有问题的。
再学C++,每学一个语法点都要想清楚他为什么这样设计和实现,如果自己用C语言去实现应该会用什么样的方法来实现,如果汇编学的好还可以去阅读反汇编的结果来看看编译器到底是怎么实现的。
而且根据软件的原理来说只需要一种编程范式(比如过程式),就已经可以解决所有问题了,从数学上来讲这么多的范式并不是必要的,C++的难度并不在语法语意等语言层面,而是没学过C++所支持的面向对象、泛型编程、元编程、函数式编程等不同编程范式,以至于标准模板库(STL)里关于数据结构和算法的知识。
虽然语义正确,但是如果我们的实参只为了传递给Teacher,传递之后而没有其他作用的话,那么这个实现是效率低下的。字符串的拷贝花销可观(关于std::string的COW,SSO,view的讨论是另一个故事了)
而相对其他语言,例如java语言:我们提供专门为某一类产品定制的集成模块,比如发动机、变速箱等等,您可以利用这些模块定制化特定种类的产品。我们的产品一向以大负载,强功率著称,是你处理大量需求的不二选择
JAVA、Python等很多编程语言都是没有指针的。因为它们的虚拟机或解释器自带自动垃圾回收。最常见的问题就是忘了回收或者其他变量正在引用就提前回收了
在我自己看来c++11后的一些新语法的创新点
显示的右值语义:文法创新(栈上)变长数组:二进制创新,c++14赶紧又把它给废了(感谢评论指正,c++11就没采纳)。
c++20的协程(ts):二进制创新,c++唯二提供编译器自动堆上分配内存保存数据的语法糖(第一个是异常)。
另外,在文件中存储浮点数,至少也有五种完全不同的方法(编码)其选择要取决于具体应用场景。然而据我了解,Python在文件中存储浮点数通常只使用会丢失精度的文本方式。
而预编译中的宏则是直接替代,防止了函数调用。函数调用也是需要损失性能的。正是这种过分强调性能,导致预编译被大量使用,给代码阅读和调试带来很大的不方便。
总之,C++给人带来了大量心智包袱。我就是这些心智包袱的受害者。如果克服了这些心智包袱,C++还是很简单的。(最后一个小彩蛋这样就差不多\(^o^)/变强了)