C++相对于C语言不但继承 了C语言的大部分语法功能再次基础上还增强优化了很多的功能,接下来我就一一列举!
1.register关键字功能增强
解释://C语言的register的作用请求编译器将变量放在寄存器里面速度快,但是变量不能取地址
//C++中对依然支持register,但是变量可以取地址,因为C++编译器有自己的优化方式,当检测当程序有register变量要取地址时对register声明变得无效,因为自己会进 行优化。
2.类型检测增强
//C语言中重复定义多个同名全局变量是合法的
//C++中不允许这种做法
//C++的所有函数变量必须有类型,且C语言的默认类型C++不支持
//C语言检测没有这么严格
3.struct类型增强
//C语言中struct定义了一组变量的集合,但是C编译器并不认为这是一个新的类型
//C++中struct是一种新的类型的定义声明
4.C++新增Bool类型的关键字
//C++bool可取的值只有ture和false,理论上其只占一个字节,这取决与编译器的实现
//ture代表真值,编译器处理为1
//false代表非真,编译器处理为0
//bool只有ture和fslae两个值,在赋值时将非0转换为ture将0转换为false
5.三目运算符
//C语言的三目运算符是个表达式,不能做左值,返回其中的大数或者小数,其运算结果是储存在寄存器中的
//C++的算木运算符可以做左值,因为表达式返回的是变量的本身
C++编译器是如何让三目运算符当左值的呢?
a>b?&a:&b就这么简单就实现了 ,让其返回变量的地址就好了,只不过这些是C++编译器帮我们完成这个取地址的工作了
6.const
//C语言中的const好像是个"假的"const
//C++中的const才是真正的常量
为什么这么说呢?
所以说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很相似
不同之处:const由编译器处理的,提供类型的检查和作用域检测;
#define由预处理器处理单纯的文本替换
以上所列就是C++在C语言基础的一些性能的提升和之前一些语法关键字的区别!