Что делает логические функции, которые IMP и EQV делают в VB6? Кто-либо нашел использование реального мира для них?

Вы, вероятно, должны включить оптимизацию для своего компилятора перед сравнением кода сборки, однако проблема в том, что ваша переменная известна во время компиляции, поэтому компилятор может удалить все из вашей функции, потому что он не имеет никаких побочных эффектов.

Этот пример показывает, что даже если вы измените порядок наблюдений в операторе switch в вашем примере, GCC и большинство других компиляторов будут переупорядочивать их, если включены оптимизации. Я использовал функции extern, чтобы убедиться, что значения известны только во время выполнения, но я также мог бы использовать, например, rand.

Кроме того, когда вы добавляете больше случаев, компилятор может заменить условные переходы на таблицу, содержащую адреса функций, и он все равно будет переупорядочен GCC, как можно видеть здесь .

9
задан Deanna 20 October 2015 в 09:06
поделиться

2 ответа

IMP - это «материальное значение», «a подразумевает b» или «если a, то b», что эквивалентно НЕ ИЛИ b. EQV - это «эквивалентность» или «если и только если», поэтому EQV b - это то же самое, что (a IMP b) AND (b IMP a).

Они попали туда, потому что кто-то хотел быть полным. Они могут сократить некоторые логические выражения, но вы всегда можете выразить то же самое с помощью NOT и AND, NOT и OR или только с помощью XOR.

13
ответ дан 4 December 2019 в 13:04
поделиться

IIRC, они оба выполняют побитовое! XOR для двух входов и возвращают результат.

Их нет ни в одной из кодовых баз .Net (если вы не учитываете совместимость с VB6 Layer library), поэтому следует считать устаревшим и, следовательно, игнорировать.

Наверное, не могу сказать, насколько я когда-либо их использовал.

0
ответ дан 4 December 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: