一。C与C++的关系函数
1.C++继承了C语言的全部特性优化
2.C++在C的基础上提供了更多的语法和特性spa
3.C++的设计目标是运行效率与开发效率的统一设计
C -> C语言code
+ -> 面向对象支持对象
+ ->类型增强,函数增强blog
二。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++更增强调类型,任意的程序元素都必须显示指明类型。