Определяющим свойством оператора короткого замыкания является то, что ему не нужно оценивать правую сторону, если левая сторона уже определяет результат.Для or
, если левая сторона равна true
, результат будет верным в любом случае, и нет необходимости оценивать правую сторону.Для and
это то же самое, за исключением того, что если левая сторона равна false
, результат будет ложным.
Вам нужно перегрузить и |
, и true
, чтобы получить ||
.И &
и false
для получения &&
.
a||b
соответствует чему-то вроде op_true(a)?a:(a|b)
.Поэтому, если оператор true возвращает true, ему не нужно оценивать выражение b.
a&&b
соответствует чему-то вроде op_false(a)?a:(a&b)
.Таким образом, если оператор false возвращает true, ему не нужно вычислять выражение b.
Перегрузка операторов короткого замыкания полезна при создании пользовательского логического типа, такого как nullable bools (см. DBBool
)