奇思妙想 · 2024年 6月 18日 0

声明变量一定需要指定类型吗?

53 次浏览

早期编程语言都需要指定变量类型,随着编程语言不断发展,新的编程语言允许编译器自动推导变量类型,允许不指定变量类型。

  • C/ObjC声明变量必须指定类型。
  • C++ 11 (2011年)引入auto关键字,可自动推导类型。
  • C# 3.0 (2007年)引入var关键字可自动推导类型。这种变量也被称为隐式类型的局部变量,和C++ auto类似。
    当然,不止是简单类型变量,对于一些组合的复杂类型,var可避免单独定义类型。当然,元组也可以解决这种需求,根据需要而选。
  • Java 10 (2018年)引入var关键字,同样可以自动推导类型。
  • Python/Shell/JS 之类的解释型语言,根本无需指定变量类型,解释器会默默分析。
  • VB 8之前声明变量必须指定类型,VB 9(包括)之后不一定要指定,可选择编译器自动推导类型。
  • Go/Rust/Swift/仓颉 都可选择由编译器自动推导类型。

var类型

不同编程语言可能有var类型,但它们可能是不同含义。

  • C# var声明方便了程序员不用写实际类型,但编译器会自动判断出实际类型,编译的IL代码和用实际类型没区别。
    • 类似的,Go/Rust有自动类型推导,和C#一样,编译器会推导出类型。
    • JS的var就截然不同,它仅仅代表一种类型,编译器并没有看到var推导更多信息,只是作为变量声明或定义的标志。