C到C++的升级_2
一。C与C++的关系
1.C++继承了C语言的所有特性
2.C++在C的基础上提供了更多的语法和特性
3.C++的设计目标是运行效率与开发效率的统一
C -> C语言
+ -> 面向对象支持
+ ->类型加强,函数加强
二。C++中更强调语言的“实用性”,所有的变量都可以在需要使用时在定义。
在C语言中,重复定义多个同名的全局变量是合法的。
在C++中,不允许定义多个同名的全局变量
C语言中多个同名的全局变量最终会被连接到全局数据区的同一地址空间上
C++直接拒绝这种二义性的做法。
三。C++对C语言的加强
1. C++编译器对 const 常量的处理
a .当遇到常量声明时在符号表中放入常量。
b。编译过程中若发现使用常量则直接以符号表中的值替换。
c。编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。
C语言中的const常量是只读常量,有自己的存储空间。
C++中的const常量
可能分配存储空间。
#当const常量为全局,并且需要在其他文件中使用
#当使用&操作符取const常量的地址
#include <stdio.h> int main(int argc, char *argv[]) { const int c = 0; int* p = (int*)&c; printf("Begin...\n"); *p = 5; printf("c = %d\n", c); printf("End...\n"); printf("Press enter to continue ..."); getchar(); return 0; }
输出的是 C = 0;
2.C++中的const小结
a、C++中的const常量类似于宏定义
const int c = 5; 约等于 #define c 5
b.C++中的const常量与宏定义不同
const常量由编译器处理的,提供类型检查和作用域检查。
宏定义由预处理器处理,单纯的文本替换。
#include <stdio.h> void f() { #define a 3 const int b = 4; } void g() { printf("a = %d\n", a); //printf("b = %d\n", b); } int main(int argc, char *argv[]) { f(); g(); printf("Press enter to continue ..."); getchar(); return 0; }
输出: a = 3;b 报错。
3. struct 类型的加强
a、C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
b、C++中的struct是一个新类型的定义声明。
struct Student
(
const char* name;
int age;
)
Student s1;
Student s2;
4.register 关键字的变化
a。register关键字请求“编译器”将局部变量存储到寄存器中
C语言中无法取得register变量地址
b。在C++中依然支持register关键字
#C++编译器有自己的优化方式,不使用register也可能进行做优化
#C++中可以取得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效(因为C++编译器自动会对变量优化)。
早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
5. C++中所有的变量和函数都必须C有类型
a.C语言中的默认类型在C++中是不合法的
f(i)
{
printf("i = %d\n",i);
}
g()
{
return 5;
}
b.C语言中的函数里面为无参函数
void f(void)
C++中的函数为无参函数
void f()和void f(void)都可以
四。小结
1. C++更强调实用性,可以在任何地方声明变量
2.C++中的register只是一个向后兼容的作用,C++编译器能够进行更好的变量优化
3.C++中的const是一个真正意义上的常量,而不是只读常量
4.C++更加强调类型,任意的程序元素都必须显示指明类型。