为什么Java,C#和C都没有范围?
发布时间:2020-12-14 05:39:49 所属栏目:Java 来源:网络整理
导读:Ada,Pascal和许多其他语言支持范围,一种子类型整数的方式. 范围是从值(第一)到另一个(最后)的有符号整数值. 实现一个在OOP中执行相同的类很容易,但我认为支持本地功能可以让编译器进行其他静态检查. 我知道,不可能静态地验证一个范围中定义的变量不会“溢出
Ada,Pascal和许多其他语言支持范围,一种子类型整数的方式.
范围是从值(第一)到另一个(最后)的有符号整数值. 实现一个在OOP中执行相同的类很容易,但我认为支持本地功能可以让编译器进行其他静态检查. 我知道,不可能静态地验证一个范围中定义的变量不会“溢出”运行时,即由于输入不良,但我认为可以做一些事情. 有没有一个更简单的解决方案,至少在C,C#和Java编译时检查静态的外联分配?某种static-assert? 编辑:我明白“范围”可以用于不同的目的: >迭代器 我会专注于后者,因为Former可以很容易地以C *语言映射. volume=rangeInt(0,100); volume=101; // compile error! volume=getIntFromInput(); // possible runtime exception 谢谢. 解决方法
实际上,子范围类型实际上并不实用.我们不经常分配固定长度的数组,也没有固定大小的整数的原因.通常我们看到固定大小的数组,它们作为一个枚举,我们有一个更好的(虽然“更重”)的解决方案.
子类型也使类型系统复杂化.在变量之间引入约束比固定常数更有用. (强制性地提到整数应该是任何明智的语言的任意大小.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |