Прежде всего, прежде чем я начну, я использую VC ++ 2008 professional и использую Intel Core2 в ОС Windows. Я также знаю, что этот код НИКОГДА не будет выполняться на чем-либо кроме core2 / corei7 под управлением Windows.
У меня есть цикл while с двумя условиями, который выглядит примерно так:
примечание: это очень упрощенная версия.
while((a != b) && (array[a] < c))
Если первое условие (a != b)
генерирует ложное значение, будет ли оцениваться второе условие? или цикл просто прекратится прямо там?
Я провел несколько тестов, и кажется, что это действительно так.
Однако, здесь есть подвох. Когда и если первое условие оценивается как ложное, второе условие БУДЕТ генерировать нарушение доступа, если оно оценивается. Однако, как я вижу, после того, как первое условие оценивается как ложное, программа не удосуживается оценить второе условие и выходит из цикла, что спасает меня.
Проблема в том, что я не могу полностью избавиться от проблемы нарушения доступа, не заставив мой очень хороший и аккуратный код внезапно взорвать меня. Тем не менее, из-за небольшой «ошибки» (я знаю, что это оптимизация компилятора, а не ошибка), я, похоже, смог от нее избавиться. Я также знаю, что это, вероятно, не очень хорошая практика программирования, но, честно говоря, в моей ситуации, если это сработает, я уже впереди игры.
У меня вопрос: вернется ли этот «баг» или программная халатность и укусит ли меня когда-нибудь? Даже если учесть, что я проверил ад из этого раздела и ТОЛЬКО В ЭТОМ РАЗ БУДЕТ ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО?