当前位置:主页>销售管理软件> 列表

关于数据类型的强制转换问题 找进销存管理软件下载

进销存软件版1楼: var
a: Integer;
b: Integer;
a := b + 5,与 a := b + Integer(5);
这两句语句有区别吗?
或者根本没区别,因为在前一句,Delphi会自动转换为Integer型,对数值的强制类型转化,会影响到数值在代码段中占用空间。比如5在代码段中占4个字节。
我说的对吗?

2楼: 两种写法最终生成的机器码都是 lea ebx,[eax+$05] 十六进制机器码为: 8D5805
看来,Delphi的编译器十分的智能,根本就没有给5专门开辟空间来存放,而是直接嵌入
到了指令中(机器码最后的那个05)——当然这是在打开编译优化的情况下。如果关闭编译
优化,最终代码就变成了(两种写法的结果仍然一样):
mov eax,[ebp-$0c]
add eax,$05
mov [ebp-$08],eax
呵呵,同样没有将这个“5”放到数据段中。

因为A和B都是Integer,5本身也能被自动转化,因此,加不加Integer()都一样。 如进销存管理软件下载

3楼: 喜欢看creation_zy大哥对问题的分析
透彻!

4楼: 我看不懂啊
我说这个常数5本身是不是只在1个字节,但在运算时,需类型转换,所以需一个中间变量,然后在进行运算

5楼: creation_zy大哥对问题的分析得对。顶!

6楼: 5没有被分配字节,delphi自动识别5。


就像你把原来的卡片a,delphi直接换成了卡片a+5
而不是换成两个卡片a,和卡片5加起来

进销存软件版7楼: 5本身就是个Integer类型的常量
编译器应该会把这个强制类型转换优化掉的
Integer();