第二课 C语言到C++的升级
一、C与C++的关系
-
C++继承了所有C的特性
-
C++在C的基础上提供了更多的语法和特性
-
C++的设计目标是运行效率与开发效率的统一
-
C++
以C语言为基础
面向对象支持
类型加强、函数加强、异常处理…
-
C+更强调语言的实用性
-
搜有的变量都可以在需要使用时再定义
-
在C语言中,重复定义多个同名的全局变量时合法的,这些全局变量最终会被链接到全局数据区的同一地址上
在C++中,不允许定义多个同名的全局变量
-
C++所有的标识符都必须显示的声明类型
-
C语言中的默认类型在C++中是不合法的
-
三目运算,C语言不能作为左值(返回的是变量值),C++可以(返回的是变量本身,但是其中只要有一个为常量,就不能作为左值)
C:a = (a<b?a:b)
C++:(a<b?a:b) = 3
二、register 关键字
-
register 关键字请求编译器将局部变量存储与寄存器中
在C++中依然支持register关键字
C++编译器有自己的优化方式
- C语言中无法获取register变量的地址
- C++中可以取得register变量的地址
-
C ++中的register 关键字
C++编译器发现程序中需要取register变量地址时,register对变量的声明变得无效(早期C++编译器)
早期的C语言编译器不会对代码进行优化,因此register变量是一个很好的补充
三、struct 关键字的加强
-
C语言
struct 定义了一组变量组合
strucct定义的标识符并非一种新的数据类型,如果需要定义新的类型,需要加typedef
-
C++
struct用于定义全新的类型
四、面试小问题
-
int f()和int f(void)有什么区别?
-
C语言
int f()表示返回值为 int,接受任意参数的函数
int f(void)表示返回值为int的无参函数
-
C++
具有相同的意义,表示返回值为int的无参函数
-
五、小结
- C ++更强调实用性,可以在任意的地方声明变量
- C++中的register关键字只是一个兼容作用
- C++编译器能够更好的进行优化
- C++中的任意标识符都必须显示的指明类型