C++真的比C差吗

相信用过C++的程序员知道,C++的很多特性主要就是解决C语言中的各种不完美和缺陷:(注:C89C99中许多的改进正是从C++中所引进的)

1、用namespace解决了很C中变量与函数重名的问题

2、用const/inline/template代替了宏,解决了C语言中宏的各种坑;

3、用const的类型解决了很多C语言中变量值莫名改变的问题;

4、用引用代替指针,解决了C语言中指针的各种坑,这个Java里得到彻底地体现

5、用强类型检查和四种类型转型,解决了C语言中乱转型的各种坑。

6、用封装(构造,析构,拷贝构造,赋值重载)解决了C语言中各种复制一个结构体(struct)或是一个数据结构(link, hashtable, list, array等)中浅拷贝的内存问题的各种坑。

7、用封装让你可以在成员变量加入getter/setter,而不会像C一样只有文件级的封装。

8、用函数重载、函数默认参数,解决了C中扩展一个函数搞出来像func2()之类的ugly的东西。

9、用继承,多态和RTTI(解决了C中乱转struct指针和使用函数指针的诸多让代码ugly的问题。

10、用RAIIResource Acquisition Is Initialization,意为资源获取即初始化),智能指针的方式,解决了C语言中因为需要释放资源的而出现的非常ugly的代码的问题。

11OO(面向对象)和GP(泛型编程)解决各种C语言中使用函数指针,对指针的乱转型以及一大砣if-else搞出来的ugly的代码

12、用STL解决了C语言中算法和数据结构分离造成的多种坑。

上述的这些东西填了不知有多少的C语言编程和维护的坑。少用指针,多用引用,试试auto_ptr,用用封装,继承,多态和函数重载……,你面对的坑只会比C少,不会多。

C++的人会觉得C++更容易出错?我觉得主要是下面几个原因:

1CC++都没学好,大多数人用C++C,所以,C的坑和C++的坑合并了。

2C++太灵活了,想怎么搞就怎么搞,所以,各种不经意地滥用和乱搞。

另外,C++的编译器对标准C++的实现各异,支持地也千差万别,所以会有一些比较奇怪的问题,但是如果你用C++的封装,继承,多态,以及namespaceconst, refernece, inline, templete, overloap, auto_ptr,还有一些OO模式,并不会出现奇怪的问题。

而对于STL中的各种坑,我觉得是程序员们还对GP(泛型编程)理解得还不够,STL是泛型编程的顶级实践!属于是大师级的作品,一般人很难理解。必需承认STL写出来的代码和编译错误的确相当复杂晦涩,太难懂了。这也是C++的一个诟病。

你可能感兴趣的:(C++学习笔记)