Любая причина использовать утверждение времени выполнения вместо компиляции- time assert?

При просмотре кодовой базы Visual C ++ я обнаружил следующую странную вещь. Утверждение времени выполнения (которое проверяет условие и генерирует исключение, если условие нарушается ) использовалось в случае, когда условие могло быть оценено во время компиляции:

assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );

очевидно, что компилятор оценит условие и заменит код, который будет либо

assert( true );

, который ничего не делает, либо

assert( false );

, который генерирует исключение каждый раз, когда управление проходит через эту строку.

IMO утверждение во время компиляции должен был использоваться вместо этого по следующим причинам:

  • он обнаружил бы нарушение условия раньше - во время компиляции - и
  • он позволил бы генерировать более чистый (следовательно, более быстрый и меньший) машинный код

Похож на компиляцию -time assert - единственно правильная вещь. Есть ли какая-то причина предпочесть утверждение времени выполнения?

5
задан sharptooth 7 September 2010 в 13:59
поделиться