c++:静态类型1系统,所有对象,变量(常量)都要在编译时确定类型,并且确定后该对象,变量的类型将不能改变
静态类型在编译时已经确定,其是固定的;而对象是个运行时概念,其是灵活的,一旦程序运行后,就没什么类型的概念了,为什么还需要类型呢?
C语言解决了B语言存在的一个严重的问题—类型问题。最初B语言是按字长取址,其运行机器比较简单,那时候语言的唯一数据类型称为word或者cell,当时还没有类型的概念,只是存储数据的一个单位罢了
- B语言不适合处理单字节。需要将字节打包1到cell上,而且读写时涉及重组这些cell
- B语言为了支持浮点数远算引入特殊的操作符,而这些操作符是与硬件相关的
- B语言对指针处理有额外的开销,指针作为数组的索引,需要运行时调整数组的下标才能被硬件所接受
后来类型系统的重要性更多体现在类型安全,类型检查上。类型不仅能够给数据赋予意义,还能充当接口,对行为进行约束。
让一群猴子编写程序,如果这些猴子用的是机器语言,那么每个字节的组合都可能被图灵机解释并运行,只不过这样的执行结果毫无意义,而高级语言(例如c++)有自己的语法,词法,输入的组合能够被编译器检查,这样的功能能在运行前拦住很多无意义的字节组合,最终可运行的程序或多或少都有意义。例如定义了一个“人”的类型,那么其对象在运行过程中不会变成狗,也不会飞。
与动态类型相比,在运行时所检查出的因类型而引发的错误都能在编译时发现
静态类型语言在重构后能及时发现类型错误,例如在通过重构函数的形参类型,在编译时能够找出所有的调用者,从而避免了遗漏
- 与之对应的是动态类型,对象的类型在运行时确定,其类型也可以动态改变 ↩︎