 |
如果你的n定义为Variant类型(默认),那么你的程序就会成功,而如果定义n为String类型就不会成功。这是因为VB对Variant类型处理的比较特殊,它总是尽可能地将两个不同的类型转换为相同的类型,然后比较,所以它会把保存的字符数据和数字数据的Variant变量都转换为数字型。
NewViewStudio的意见:
有趣的问题,有趣的程序
n=Str(Text1.Text)
用Str将字符型的Text1.text转换为字符型=废话
用Val将数值型的1转换为数值型=废话
这两句的唯一用处就是增加CPU占用率,并且本来不需要转换的数据进行了两次转换,因为Str的实际函数原形为
Function Str(StrToCover AS Variant)
而Text1.text则是String型
n=Str(text1.text)
解释器将运行如下步骤
1、将Text1.text(String)转换为StrToCover(Variant)
2、在函数内部将StrToCover(Variant)转换为TempValue(值域最小的数值形式)
3、然后在赋值给n
后面的val(1)也经过同样的步骤。所以这两个地方都多做了2步操作,如果这是个对速度要求很高的计算过程,则相对于去掉这些步骤的程序,你将多花费将近600%的机时,因为任何类型的数据与Variant的相互转换都需要比普通付值多很多的机时,建议朋友们多挖深层次的知识,尽量避免无用的代码。
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面, 。
|