type
   Size=(sSmall=5,sMedium=10,sLarge=sSmall+sMedium);
var
   X:Size;
begin
   X:=sSmall;      //Ord(X)=5
   X:=Size(6);      //Ord(X)=6  **********
   X:=Succ(X);     //Ord(X)=7
end.
我不明白**********处的代码
为什么是6?谢谢了。

解决方案 »

  1.   

    只解释代码意思,至于为什么这么定义,这么写就不清楚了X:=sSmall;
    应该是初始化,但在这里是多余的,因为后面的X:=Size(6);已经把X改变了X:=Size(6);
    是取枚举Size中序号为6的元素,但Size中没有序号为6的元素,所以X的值不确定,但此时X的序号是6X:=Succ(X);
    是取下一个元素,由于原來X的序号是6,所以执行这句后X的序号变为7;但Size中也没有序号为7的元素,所以X的值也不确定如果改成下面这样定义,最后X的值是sXXOO
    type Size=(sSmall=5,sXXOO=7,sMedium=10,sLarge=sSmall+sMedium);
      

  2.   


    size(6)的功能,也是强制类型转换,他只是告诉编译器不要做类型检查而已,不要有想太多。