-
C与C++的关系:
C++继承了所有的C特性
C++在C的基础上提供了更多的语法和特性
C++的设计目标是运行效率与开发效率的统一 -
C++对C的加强:
-
1:C++中更强调语言的“实用性”,所有的变量都可以在需要使用时
再定义。 -
注意:
C语言中的变量都必须在作用域开始的位置定义!!
-
2:register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中
• C语言中无法取得register变量地址
在C++中依然支持register关键字
• C++编译器有自己的优化方式,不使用register也可能做优化
• C++中可以取得register变量的地址
早期C语言编译器不会对代码进行优化,因此
register变量是一个很好的补充。
C++编译器发现程序中需要取register变量的地
址时,register对变量的声明变得无效。
-
在C语言中,重复定义多个同名的全局变量是合法的
-
在C++中,不允许定义多个同名的全局变量
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
C++直接拒绝这种二义性的做法。
-
C++编译器对const常量的处理
当碰见常量声明时在符号表中放入常量
编译过程中若发现使用常量则直接以符号表中的值替换
编译过程中若发现对const使用了extern或者&操作符,则给
对应的常量分配存储空间
注意:
C++编译器虽然可能为const常量分配空间,
但不会使用其存储空间中的值。
C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间
• 当const常量为全局,并且需要在其它文件中使用
• 当使用&操作符取const常量的地址
C++中的const小结
C++中的const常量类似于宏定义
const int c = 5; ≈ #define c 5
C++中的const常量在与宏定义不同
• const常量是由编译器处理的,提供类型检查和作用域检查
• 宏定义由预处理器处理,单纯的文本替换
struct类型的加强:
C语言的struct定义了一组变量的集合,C编译器并不认为这
是一种新的类型
C++中的struct是一个新类型的定义声明
struct Student{
const char* name;
int age
};
Student s1;
Student s2;
在C语言当中编译不会通过,因为C编译器并不认为这是一种新的类型。
C++中所有的变量和函数都必须有类型
C语言中的默认类型在C++中是不合法的
f(i)
{
printf("%d\n",i);
}
g()
{
return 5;
}
这样的代码在C编译器中可以通过,在C++中不能通过,C语言当中的默认类型在C++中不合法。
在C语言当中,g()可以有很多参数
在C语言中
int f();表示返回值为int,接受任意参数的函数
int f(void);表示返回值为int的无参函数
在C++中
int f();和int f(void)具有相同的意义,都表示返回值
为int的无参函数
C++以C语言为基础进行了加强
C++更强调实用性,可以在任意的地方声明变量
C++中的register只是一个向后兼容的作用,C++编译器能够进行
更好的变量优化
C++中的const是一个真正意义上的常量,而不是只读变量
C++更加强调类型,任意的程序元素都必须显示指明类型