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