指定数据类型或指针数据类型是只读的。
语法
参数
说明
指定
Const限定符右侧的
datatype 或
Ptr将被视为只读。只读(
Const)声明是可以被视为“承诺不改变”的类型安全性的度量。编译器使用const声明来检查对变量和参数的操作,并且如果数据可能会发生变化,则在编译时生成错误。由于所有的检查都是在编译时进行的,所以使用
Const限定符没有运行时开销。
Const可以在数据类型声明的任何地方使用。这包括变量,参数,函数返回结果,用户定义的类型字段,类型别名和转换。
datatype 可以是任何内置的标准数据类型或用户定义的类型。
只读变量必须具有初始化器,因为通过赋值修改只读变量将生成编译器错误。初始化程序可能会在声明变量后出现。
非const和const变量都可以传递给一个期望一个const参数的过程。但是,一个const变量可能不会被传递给一个采用非const参数的过程,并且会产生一个编译错误。
程序可以根据参数的常量重载。例如,一个过程的一个版本采用
'byref foo as bar'参数并且该过程的另一个版本采用
'byref foo as const bar'参数,可能会重载一个过程。
使用指针声明,
Const可用于指示指针声明的哪一部分是只读的(所有其他部分都是默认读写)。指针数据类型的只读部分可以是指针本身(地址),指针指向什么(数据)或两者。在具有多个级别
Ptr间接的声明中,最右边的
Ptr表示间接的最高级别,因此首先被取消引用。
编译器具有相对于const限定符的八(8)个指针间接级别的内部硬限制,并且使用
Ptr具有大于八(8)个间接级别的数据类型的
Const的行为是未定义的。
例子
''常数变量
''程序采用const参数
Sub proc1( ByRef x As Const Integer )
'' can't改变x,因为它是const
'' x = 10 ''编译错误
''但是我们可以在表达式中使用它
''将其赋值给其他变量
Dim y As Integer
y = x
y = y * x + x
End Sub
''程序采用非常量参数
Sub proc2( ByRef x As Integer )
''我们可以改变价值
x = 10
End Sub
''声明一个非const和const变量
Dim a As Integer
Dim b As Const Integer = 5
''proc1()将接受一个非const或const
''因为proc1()承诺没有
''更改传递给它的变量。
proc1( a )
proc1( b )
''proc2()将接受一个非const参数
proc2( a )
''但不是const参数,因为proc2()
'' might change the variable'我们的数据
'' promised that 'b'不会改变
'' proc2( b ) ''编译错误
''指针指针
''一个整数
Dim x As Integer = 1
Dim y As Integer = 2
Dim z As Integer = 3
''检查编译器是否生成错误
''当尝试重新赋值常量变量时??,
''取消下面的作业。
''
Scope
''指向整数的指针
Dim p As Integer Ptr = @x
p = @y /' OK - pointer can be changed '/
*p = z /' OK - data can be changed '/
End Scope
''
Scope
''指向恒定整数的指针
Dim p As Const Integer Ptr = @x
p = @y /' OK - pointer can be changed '/
'' *p = z /' Error - data is const '/
End Scope
''
Scope
''一个指向整数的常量指针
Dim p As Integer Const Ptr = @x
'' p = @y /' Error - pointer is const '/
*p = z /' OK - data can be changed '/
End Scope
''
Scope
''指向常量整数的常量指针
Dim p As Const Integer Const Ptr = @x
'' p = @y /' Error - pointer is const '/
'' *p = z /' Error - data is const '/
End Scope
''过载程序中的Const参数
''具有非常量参数的程序
Sub foo Overload( ByRef n As Integer )
Print "称为“foo(byref n整数)”"
End Sub
''程序与const参数
Sub foo Overload( ByRef n As Const Integer )
Print "称为'foo(byref n作为const整数)'"
End Sub
Dim x As Integer = 1
Dim y As Const Integer = 2
foo( x )
foo( y )
''OUTPUT:
'' called 'foo( byref n as integer )'
'' called 'foo( byref n as const integer )'
与QB差别
参考