C与C++的关系
(1)C++继承了所有的C特性;
(2)C++在C的基础上提供了更多的语法和特性;
(3)C++的 设计目标是运行效率与开发效率的统一;
C++对C的加强
(1)C++中更强调语言的实用性,所有的变量都可以在需要使用时再定义
可以for括号内声明变量,C不可以。
(2)register关键字的变化
register关键字请求“编译器”将局部变量存储在寄存器中,C语言无法取得register变量地址。
在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可能做优化;C++中可以取得register变量的地址,C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
在C++可以不用register,它在C++存在的目的仅仅是兼容C,在C++中出现register时,仅仅把它当做一个普通的变量。
(3)在C语言中可以定义多个全局变量,是合法的;
(4)在C++语言中,不允许定义多个同名的局部变量,C语言中多个同名的局部变量最终会被链接到全局数据区的同一地址空间上。C++直接拒绝这种二义性的做法。
这是在C中运行
这是在在C++中运行
(5)C++编译器对const常量的处理
当碰见常量声明在符号表中放入常量;
编译过程中若发现使用常量则直接以符号表中的值替换;
编译过程中若发现对const使用了extern或者&操作符,则给对应常量分配存储空间
注意:C++编译器可能为const常量分配空间,但不会使用其存储空间的值。
(6)C语言中的const变量
C语言中const变量只是只读变量,有自己的存储空间;
(7)C++中的 const常量
可能分配存储空间:当const常量为全局,并且需要在其他文件中使用;当使用&操作符取const常量的地址;
实例分析:C++中的const常量
在C中编译出错,没法确定数组有多大。a和b是变量;
在C++不会,a和b是常量;
(8)struct类型的加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型;
C++中的struct是一个新类型的定义声明;
(9)C++中所有的变量和函数都必须要有类型,C语言中的默认类型在C++中是不合法的。
C语言中什么都不写可以接收参数,C++加不加void都不接收。
(10)在C语言中,int f();表示返回值为int,接受任意参数的函数;
int f(void);表示返回值为int的无参函数;
(11)在C++中,int f(),和int f(void)具有相同的意义,都表示返回值为int的无参函数。