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