升级版的C语言-->C++

时间:2021-01-15 01:32:28

C++相对于C语言不但继承 了C语言的大部分语法功能再次基础上还增强优化了很多的功能,接下来我就一一列举!

1.register关键字功能增强

解释://C语言的register的作用请求编译器将变量放在寄存器里面速度快,但是变量不能取地址

           //C++中对依然支持register,但是变量可以取地址,因为C++编译器有自己的优化方式,当检测当程序有register变量要取地址时对register声明变得无效,因为自己会进    行优化。

升级版的C语言-->C++

2.类型检测增强

//C语言中重复定义多个同名全局变量是合法的

//C++中不允许这种做法

升级版的C语言-->C++

//C++的所有函数变量必须有类型,且C语言的默认类型C++不支持

//C语言检测没有这么严格

升级版的C语言-->C++

升级版的C语言-->C++

3.struct类型增强

//C语言中struct定义了一组变量的集合,但是C编译器并不认为这是一个新的类型

//C++中struct是一种新的类型的定义声明

升级版的C语言-->C++

升级版的C语言-->C++

4.C++新增Bool类型的关键字

//C++bool可取的值只有ture和false,理论上其只占一个字节,这取决与编译器的实现

//ture代表真值,编译器处理为1

//false代表非真,编译器处理为0

//bool只有ture和fslae两个值,在赋值时将非0转换为ture将0转换为false

升级版的C语言-->C++

5.三目运算符
//C语言的三目运算符是个表达式,不能做左值,返回其中的大数或者小数,其运算结果是储存在寄存器中的

//C++的算木运算符可以做左值,因为表达式返回的是变量的本身

升级版的C语言-->C++

C++编译器是如何让三目运算符当左值的呢?

a>b?&a:&b就这么简单就实现了 ,让其返回变量的地址就好了,只不过这些是C++编译器帮我们完成这个取地址的工作了

6.const

//C语言中的const好像是个"假的"const

//C++中的const才是真正的常量

为什么这么说呢?

升级版的C语言-->C++

升级版的C语言-->C++

所以说C语言中的const是假的const

为什么C++通过指针没有改掉变量的值呢?

解释:以上图代码做参考,因为C++编译器在遇见const声明的变量后,将这个变量a放在符号表中,当你要使用变量a的时候就从符号表中将这个变量的值拿出来给你使用,

当你p=(int *)&a的时候,编译器会为a单独在内存中开辟空间,p指向这块空间,这个时候给这块空间赋值为100,无论你赋值成多少,都和符号表中的a的值没有任何关系,所以通过指针没有修改a的值

结论:

C语言中的const变量是只读变量有自己的储存空间;

C++中的const可能分配空间也可能不分配空间

当const修饰的变量为全局变量或者需要在其他文件中引用或者用&符号的时候会开辟空间。

7.const和#define的对比

//const和#define的相同之处:const和#define很相似

升级版的C语言-->C++

不同之处:const由编译器处理的,提供类型的检查和作用域检测;

                    #define由预处理器处理单纯的文本替换

升级版的C语言-->C++

升级版的C语言-->C++

以上所列就是C++在C语言基础的一些性能的提升和之前一些语法关键字的区别!