为什么Java,C#和C++没有范围?
Ada,Pascal和许多其他语言支持范围,这是一种子类型整数的方法。范围是一个有符号整数值,其范围从一个值(第一个)到另一个值(最后一个)。在OOP中实现一个执行相同操作的类很容易,但我认为本机支持该功能可以让编译器进行额外的静态检查。
我知道不可能静态地验证在一个范围内定义的可变性不会“溢出”运行时,即由于输入不良,但我认为可以做一些事情。我想到了按合同设计的方法(Eiffel)和Spec#(C#合同),它们给出了一个更通用的解决方案。
有没有更简单的解决方案,至少在C++,C#和Java的编译时检查静态越界赋值?某种静态断言?
编辑:我知道“范围”可以用于不同的目的:
- 迭代器
- 统计员
- 整数子类型
我会把重点放在后者上,因为前者很容易在C *语言上映射。我想到一组封闭的值,比如音乐音量,即从1到100的范围。我想按值递增或递减它。我希望在静态溢出的情况下出现编译错误,如下所示:
volume=rangeInt(0,100);
volume=101; // compile error!
volume=getIntFromInput(); // possible runtime exception
谢谢。