При просмотре кодовой базы Visual C ++ я обнаружил следующую странную вещь.Утверждение времени выполнения (которое проверяет условие и выдает исключение, если условие нарушено ) использовалось в случае, когда условие могло быть оценено во время компиляции:
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
ясно, что компилятор оценит условие и заменит код, который фактически будет либо
assert( true );
, который ничего не делает, либо
assert( false );
, который выдает исключение каждый раз, когда управление проходит через эту строку.
IMO вместо этого следует использовать утверждение времени компиляции по следующим причинам:
- это выявит нарушение условия раньше - во время компиляции - и
- это позволило бы генерировать более чистый (таким образом, более быстрый и меньший) машинный код
Похоже, утверждение времени компиляции - единственно правильная вещь.Есть ли какая-либо возможная причина, чтобы предпочесть утверждение времени выполнения здесь?