C++继承了所有C特性
C++在C的基础上提供了更多的语法和特性
C++的设计目标是运行效率与开发效率的统一
一、register关键字
1、在C++中依然兼容C中的register关键字
2、区别
C语言中无法获取register变量的地址
C++中可以获取register变量的地址
C++编译器发现对register关键字所修饰的变量取地址时,register对变量的作用实际上失效
二、重复定义多个同名全局变量
1、C语言中可以,实际上用的是一块地址空间
2、C++中不可以
三、struct关键字
1、C语言中struct定义了一组变量的集合,而不是一种新的类型
2、C++中的struct定义了一种新的类型
四、函数的返回值和参数
1、C语言中不写参数时,函数接收任意类型的参数,C++则不接收任何参数
2、C++可以不写返回值,默认为int类型,C++必须显式写出函数的返回值
五、变量的定义位置
1、C语言中的变量都必须在作用域开始定义
2、C++中的变量需要使用时再定义即可
六、const关键字
1、C语言中的const
(1)修饰只读变量
(2)修饰的局部变量在栈上分配空间
(3)修饰的全局变量在只读存储区分配空间
(4)只在编译期起作用
总结:const修饰的变量不是真正的常量,只是告诉编译器不能作为左值使用。
2、C++中的const
(1)const声明的变量放入符号表中称为真正的常量,类似于宏定义(区别在于编译器对const常量进行类型和作用域的检查,而宏定义只是简单的替换,容易造成bug),一般情况下不分配存储空间
(2)对const常量使用extern和&操作符时可能为常量分配存储空间,但不会使用空间中的值
七、三目运算符
1、C语言中的三目运算符返回的是变量的值(不能作为左值使用)
2、C++中返回的是变量时,返回的是变量的引用(可以作为左值使用)
返回的是常量时,返回的是值(此时不能作为左值使用)
int var_1 = 1;
int var_2 = 2;
(var_1 < var_2 ? var_1 : var_2) = 0; //可以
(var_1 < var_2 ? 0 : var_2) = 1; //error
参考:狄泰软件学院<<C++深度解析>>课程