1) vip всегда вычисляет логические выражения полностью. Такой метод опционально присутствует и в других языках высокого уровня, в частности, в Дельфи.
Тут напрашивается оптимизация (в любом С-подобном языке такое есть). Скажем, если второе условие - это тяжелая операция, то она все равно будет выполнена, даже если это никак не повлияет на результат выражения (в случае если выражение однозначно определяется первым условием). Т.е. сейчас мне приходится все тяжелые операции проверки выносить на уровень ниже, т.е.
Код: Выделить всё
if (SomeCondition)
if (SomeHardOperation())
Func;
что не есть удобно, так как при увеличении количества проверок возрастает уровень вложений, код становится трудно читать и сопровождать
2) В смысле вы после вызова функции не очищаете стек, почему? Чистить переменные нужно, это обезопасит начинающего программиста от трудно уловимых ошибок. Т.е. дополнительно нужно держать в голове всякие детали реализации, тем более стандарта на вип я не нашел (есть ли он вообще?), где бы описывалось такое вот поведение.
3) И кстати чем отличается (в смысле реализации и поведения) вот такие 2 функции:
и
Спасибо!