C语言和C++虽然经常被大家同时提及,但是这两种编程语言还是有非常大的区别的。C语言是一种结构化编程语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。而C++是在C的基础上改进后的一种编程语言,主要是增添了许多新的功能,难度也比C大,和C一样侧重于计算机底层操作,也就是系统软件的开发。下面我就详细说说这两种主流编程语言的不同。
C语言具备所见即所得的特点。这种特点,说好听就是C语言代码很清晰,很精确地表达了机器的全部动作,让猿猴有掌控一切了如指掌的虚幻快感。说句不好听就是C语言本质上还是面向机器的语言,程序员不能在其上玩稍微高级一点的动作,必须清清楚楚地写明每一步的操作,就算是重复类似的工作,如果函数没法提炼,那就没戏了。
C语言编译器内部相比于简单的汇编翻译器,自然要做更多的事情。但是它的内核还是很机械,很无趣,不做哪怕一点点多余的事情,相比于汇编语言,不过就是可以表达的力度大了一点点,一点都不智能。不智能的意思是,它没有函数重载,没有函数重写,数据类型所蕴含的无穷潜力,在C这里仅仅用于定义内存布局,简单的类型检查。程序员在C语言里面难以用类型玩出啥新奇的花样。代码复用的手段只有函数以及预处理,不过就是将连续操作的一段语句包装成更大力度的东西。由于缺乏高级的抽象机制,用C语言实在没办法搞应用框架这种高大上的玩意,实在是语法很不友好,抽象力度太细,抽象手段太单一。
表面上看,C++不过是比C多了很多语法糖,当然,每一条语法糖,都代表一种新的抽象手法,表示写优雅的代码又多了一种选择。
比如说,析构函数,用以当对象的生命周期结束时将被调用。析构函数的调用时间与函数调用的即时调用就很不一样,应该可以感受出来这种时间差异区别的明显。C语言中没有任何办法做析构函数这样延后执行的手段,除了手工显式的在作用域结束之前调用函数,就别无他法了。而大C++就大不一样,只要对象存在析构函数,只要定义对象变量,只要变量要死了,其析构函数就被调用。而且,当有多个不同类型变量聚在一起,各自都有析构函数,编译器就会很体贴的按照栈式顺序执行这些对象的析构函数,这些函数调用的动作,从代码字面上看不出来,但是C++的语义就规定了这样一系列的动作必须发生。而C语言的话,就要求程序员明确地调用这些析构函数,而且栈式顺序也续保持一致。这么说,是否可以感受到C++编译器相对于C语言更智能一些了。C语言的所见即所得的意思,就是一切要做的事情,程序员必须给我一一写出来,否则,本编译器绝不多做一点点多余的事情。