一、C与C++的关系
C与C++的关系示意图如下图所示:
从图中可以看出以下几点:
- C++继承了所有的C特性
- C++在C的基础上提供了更多的语法和特性
- C++的设计目标是运行效率与开发效率的统一
- C与C++不是竞争关系,而是 C++是从C进化而来的。
二、C到C++的升级
C++更强调语言的实用性,所有变量都可以在需要使用时再定义,而C语言中的变量都必须在作用域开始的位置定义。如下图展示了是C++代码是如何定义变量的。
register关键字是请求编译器将局部变量存储于寄存器中,从提高访问变量的效率,C++为了兼容C依然支持register关键字,但是C++编译器有自己的优化方式。但C++编译器发现程序中需要取register变量的地址师,register对量的声明会变得无效。而C语言中是无法获取register变量的地址,早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
在C语言中,重复定义多个同名的全局变量是合法的,多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。而C++中,不允许定义多个同名的全局变量。
struct关键字的加强,C语言中struct定义了一组变量的集合,而struct定义的标识符并不是一种新的类型,需用typedef关键字才能定义新类型。而C++中的struct用于定义一个全新的类型。例如下图所示:
C++中所有的标识符都必须显示声明类型,而C语言中的默认类型在C++中是不合法的;在C语言中,int f()表示返回值为int,接受任意参数的函数;f(void)表示返回值为int的无参数函数。在C++中,int f()和int f(void)具有相同的意义,表示返回值为int的无参函数。例如下图代码C语言和C++将会有不同的解释。
在C语言中f(i)表示返回值为 int类型,可接受参数为int类型的函数。g()也是表示返回值为 int类型,可接受任意参数的函数。而在C++中,f()和g()都不是合法的函数。
三、总结
- C++更强调实用性,可以在任意的地方声明变量
- C++中的register只是一个兼容的作用,编译器能够更好的进行优化。
- C++中的任意标识符都必须显示指明类型。