Skip to content

Operator ANDALSO(短路合取) ​


返回两个数值的短路与(合取)。

语法 ​

declare operator AndAlso ( byref lhs as T1, byref rhs as T2 ) as Ret

用法 ​

result = lhs AndAlso rhs

参数 ​

lhs

左侧表达式。

T1

任何数值或布尔类型。

rhs

右侧表达式。

T2

任何数值或布尔类型。

Ret

数值或布尔类型(随 T1 和 T2 变化)。

返回值 ​

返回两个操作数的短路与(合取)。

描述 ​

此运算符对左侧表达式进行求值。如果结果为零,则立即返回零。如果结果非零,则对右侧进行求值,并返回其逻辑结果。

(对于布尔值转换为整数,false 或 true 的布尔值变为 0 或 -1 的整数值)

下面的真值表演示了短路与运算的所有组合,"-" 表示该操作数不被求值。

左操作数值右操作数值结果
0(不求值)0
非零00
非零非零-1

AndAlso 等价于:

Iif( Lhs <> 0, Rhs <> 0, 0 )

执行短路求值——只对计算结果所需的表达式进行求值。首先对左侧 lhs 求值,只有当它的值为非零(真)时,才对右侧 rhs 也进行求值。如果左侧求值 lhs 返回零(假),则此时已知整体条件为假,因此不对右侧 rhs 进行求值(跳过)。

返回类型几乎总是 Integer,值为 0 或 -1,分别表示 false 和 true。但如果左右操作数类型都是 Boolean,则返回类型也是 Boolean。

此运算符不能为用户定义类型重载。

示例 ​

start GeSHi

vb
'' Using the ANDALSO operator to guard against array access
'' when the index is out of range

Dim As Integer isprime(1 To 10) = { _
    _ ' 1  2  3  4  5  6  7  8  9  10    (2, 3, 5 and 7 are the only prime numbers)
        0, 1, 1, 0, 1, 0, 1, 0, 0, 0 _
    }

Dim As Integer n
Input "Enter a number between 1 and 10: ", n

'' isprime() array will only be accessed if n is in range
If (n >= 1 And n <= 10) AndAlso isprime(n) Then
    Print "n is prime"
Else
    Print "n is not prime, or out of range"
End If
Sleep

end GeSHi

与 QB 的差异 ​

  • 此运算符在 QB 中不可用。

参见 ​

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系