为什么许多其他语言不允许bool-to-int隐式转换?

时间:2013-10-17 21:11:47

标签: c++ boolean type-conversion

我知道C ++执行从布尔到整数类型的隐式转换,因此可以写:

bool a = (b > c);

但Java,Ada,Haskell等许多其他语言都不支持此功能。 因此,我认为必须有一些合理的理由来禁止它。 bool-to-int隐式转换的缺点是什么?

1 个答案:

答案 0 :(得分:3)

在语言历史中,有许多语言具有强大的类型安全性(这使得您不太可能意外地将某些类型转换为不同类型而没有实际意义)。这种语言的缺点是直接将某种类型转换为另一种类型可能非常困难(有时是不可能的)。

在比例的另一端,我们将找到机器语言(汇编程序),其中存在“无”类型(在大多数体系结构中通常存在不同大小的整数单元和一些浮点大小)。

C最初被设计为“机器语言的替代品”,以便更容易将Unix操作系统“移植”到不同的机器上。因此,它在类型安全方面没有太大的作用。

有些语言可以让您轻松地从一种类型转换为另一种类型,例如,PHP允许您执行以下操作:

$foo = "Hi";
$foo += 7;
echo $foo;

遇到$foo += 7;它会将“Hi”转换为零值,因为它不是有效的整数值,然后加上数字7,因此输出将为“7”。这种转换真的会导致神秘的问题。

最后,语言创建者决定语言是否应具有强,弱或中等类型的安全性。

一般来说,强类型安全的目的是阻止程序员变成傻瓜。如果你必须输入一些额外的信息告诉编译器你真的想要从一种类型转换为另一种类型,或者如果你不这样做,那么最终生成的代码并不重要 - 编译器仍会执行你要求的任何转换在某些情况下,在生成的机器代码中(在某些情况下,这意味着“只是移动数据”,在其他情况下,例如将浮点转换为整数,这意味着使用某种转换指令)。

做一个或另一个更好吗?这显然是一个意见问题,我相信一个“中间立场”是好的。

相关问题