区别总结
1、区别1
变量的定义
c++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
区别:c语言中的变量都必须在作用域开始的位置定义!!
2、区别2
register关键字的变化
register关键字请求“编译器”将局部变量存储于寄存器中
c语言中无法取得register变量地址
在c++中依然支持register关键字
c++编译器有自己的优化方式,不使用register也可能做优化
c++中可以取得register变量的地址
c++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。,c++的编译器中做的优化比我们程序员要的多多的。如果,有人对register
变量取址,那么编译器就会视为普通变量,本来可能视为register变量了。
早期c语言编译器不会对代码进行优化,因此register变量是一个很好的补充。
3、区别三
在c语言中,重复定义多个同名的全局变量是合法的,严重影响可读性
在c++中,不允许定义多个同名的全局变量
c语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。但c++直接拒绝这种二义性的做法。
4区别四
c++语言的const的优化。
c语言中的const变量
c语言中const变量是只读变量,有自己的存储空间,可以通过指针对其进行修改,
c++中的const是常量,只有在取址的时候,或者发现extern,才去分配空间,const变量在符号表中作为常量存储,当再次访问时时,由于优化的原因会直接从符号表里面访问他的值,并不会因为指针改变了他的空间的值而使值改变
既然值不用,为什么需要这一语法,可以通过内存改变值呢?
为了兼容c语言,
intarray[a+b]={0};//在c语言中,a,b作为变量,所以a+b在编译的时候是无法知道其大小的,只用在运行时才可以访问得到,而在c++中,const修饰的表示是常量,从符号表中读取,
const和#define的区别
const有严格的类型检查,和作用域的检查,而#define没有作用域的检查和类型的检查,它只是简单的文本替换。
c++中的const常量类似于宏定义
constintc=5;≈#definec5
c++中的const常量在与宏定义不同
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,单纯的文本替换
区别五:
struct类型的加强:
c语言的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型
c++中的struct是一个新类型的定义声明
区别六:
c语言中默认为×××,且函数无参时表示可以接受任一个参数(注但是不可以访问到仍和一个)
c++中所有的变量和函数都必须有类型
c语言中的默认类型在c++中是不合法的
在c语言中
intf();表示返回值为int,接受任意参数的函数
intf(void);表示返回值为int的无参函数
在c++中
intf();和intf(void)具有相同的意义,都表示返回值为int的无参函数
总结:
c++以c语言为基础进行了加强
c++更强调实用性,可以在任意的地方声明变量
c++中的register只是一个向后兼容的作用,c++编译器能够进行更好的变量优化
c++中的const是一个真正意义上的常量,而不是只读变量
c++更加强调类型,任意的程序元素都必须显示指明类型