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