我知道C++做了从布尔类型到整数类型的隐式转换,所以可以写:
bool a = (b > c);
但是许多其他语言如Java、Ada、Haskell..不支持此功能。 所以我认为禁止它一定有一些合理的理由。 bool 到 int 隐式转换的缺点是什么?
在语言的历史上,有很多具有强大类型安全性的语言的例子(这使得你不太可能无意中将某种类型转换为另一种类型,而不是真正有意的)。此类语言的缺点是直接将某种类型转换为另一种类型可能非常困难(有时是不可能的)。
在天平的另一端,我们会发现机器语言(汇编程序),其中没有“无”类型(在大多数体系结构中通常有不同大小的整数单元,以及某些大小的浮点)。
C 最初被设计为“机器语言的替代品”,以便更容易地将 Unix 操作系统“移植”到不同的机器上。因此,它没有太多类型安全性。
某些语言可以让您轻松地从一种类型转换为另一种类型,例如,PHP 允许您执行以下操作:
$foo = "Hi";
$foo += 7;
echo $foo;
遇到
$foo += 7;
时,它会将“Hi”转换为值0,因为它不是有效的整数值,然后添加数字7,因此输出将为“7”。这种类型的转换确实会导致神秘的问题。
最终,由语言创建者决定该语言是否应该具有强、弱或中等类型安全性。
总的来说,强类型安全的目的是为了防止程序员成为傻瓜。如果您必须输入一些额外的内容来告诉编译器您确实想从一种类型转换为另一种类型,或者如果您不这样做,那么对于最终生成的代码来说并不重要 - 编译器仍然会执行您要求的任何转换以某种方式在生成的机器代码中(在某些情况下,这意味着“仅移动数据”,在其他情况下,例如将浮点转换为整数,这意味着使用某种转换指令)。
做其中一个更好还是做另一个更好?这显然是一个观点问题,而且我相当确信“中间立场”是好的。