初始化 / 变量 / 数据类型 / 编程语言 · 2023年 10月 9日 0

类型推导

52 次浏览

编程语言为了方便,会默认建立一套变量默认类型机制。更高级的编程语言或脚本语言为了简化,可能引入自动类型。

  • C/C++98 auto关键字修饰自动存储的局部变量,事实上没有多大用,因为默认的局部变量就是自动存储,用它多此一举,唯一的好处是完善了变量存储种类。C++11修改auto的含义,用于编译器推导变量类型。 更像脚本语言,有编译期保驾护航无需担忧类型错误。当然auto还可以推导函数返回值,可以和指针、const一起使用,这些细节再次不赘述。
  • C++11引入了decltype(<expr>)推导类型,这种方法在STL模板方法类型定义和返回特别有效。比如一个传入参数类型T1和其他类型T2的方法,不知道临时变量和返回值类型,用decltype让编译器推导类型。
  • Java/C#/Go/Rust/JS/Python/Swift/仓颉/Kotlin 等编程语言均有自动类型推导,可能使用或者不使用任何关键字。
  • C语言以前的编译型语言不支持类型推导。
  • ObjC内置类型没有自动推导,但对于对象有id关键字有点自动推导的意思。

查看编译器自动推导的类型

  • Xcode为Swift提供一种方法,按Option键,点击对应标识符名称,会自动弹出编译器推导的类型。

近似类型的推导

编译器毕竟不是神仙,程序员心里想的是“单精度”,编译器可能会认为是“双精度“。

  • Swift对于整形默认是Int, 浮点数默认是Double,而不是Float. 如果希望是Float,必须显式指明。

类型推导的原理

  • Hindly-Milner类型系统可以为类型推导提供极大帮助。