C++和其他语言的区别
优点
- 对内存的完全掌控力(毋庸置疑)
- 灵活的指针(address variable)
- 支持按值传参,按引用传参,按指针传参(对应java的按引用传参)三种方式
- 支持宏(有待商榷)
- 生态主要集中在底层开发
缺点
- 弱类型,各种type强行转(sometimes works)
- 不支持nesting scope,只有全局global, class, function,static可以定义在函数内,但其空间分配方式与生命周期和global一致,只是其变量对外部不可见
- 缺乏成熟的import/export机制,默认export所有函数和全局变量,import需要进行变量声明(在C中表现为include),头文件声明了cpp文件中需要export的符号,include等价于”from import *”,并且C缺乏from…import机制,且当多个头文件出现同名定义时,会产生conflict而非覆盖,所以经常需要”#ifndef #def”,因此,头文件中存放的应该是声明而非定义,注意,在其他语言中,不依赖头文件进行export,而是直接依赖源码进行export,除此之外,成熟的语言还支持import as来解决命名冲突,这在C++中也没有
- 缺乏成熟的包管理系统
- 缺乏垃圾回收机制,需要自己管理空间内存
- OOP实现过于复杂,与Java将所有object分配在堆中不同,C既可以在栈中创建object(局部变量),也可以在堆中创建object,尽管更加自由,但C缺乏垃圾回收机制,容易造成堆中内存泄漏(既对没有被指针指向的object进行自动回收),除此,还有copy和assign等方法需要精心设计(传参调用copy,赋值调用assign)
- 大多类库没有实现很好的封装
- 基本没有web生态
- 缺乏反射机制
- 成员变量有指针时(存在resource management),big three实现麻烦,牢记rule of three
C++20好像新出了个“模块”,未来就可以用import了
虽然不是很懂工程相关,但是感觉封装了效率都挺低下的吧,还不如自己手写,竞赛也有时候会卡 STL 的常数……更不要说 pbds 这种了(