这是一段 C 语言代码,并且它是正确且能够通过编译的。很多人认为一门语言在变量定义时需要声明类型(比如这里的int)就认为它是”强类型“的,这实际上属于完全的误解——甚至 C 语言还是静态弱类型的。判断一个变量是什么类型的,实际上根本不需要依赖于程序员显式声明类型:
a = 1
b = true
c = []
在上面这段代码中,程序员并没有为这三个变量声明类型,但编译期仍旧能够很容易地得知 a 是数字、b 是布尔量、而 c 是一个列表/数组。这种无需显式声明类型也能推导出变量类型的能力被称为”类型推断“。因此,在很多现代的静态类型编程语言中,都是可以在许多情况中使用编程语言的类型推断能力,而无需操心为变量给出一个具体的声明的:
auto h{new Holder{42}};// Holder<int> *auto num{42}// intauto nums{newint[10]};// int *auto nums2{std::array<int,5>{1,2,3,4,5}};// std::array<int, 5>std::array<int,5> nums3{1,2,3,4,5};// std::array<int, 5>