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

数值或布尔类型(随 T1T2 变化)。

返回值

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

描述

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

(对于布尔值转换为整数,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 是开源项目,与微软公司无隶属关系