Visual C++ コードベースを確認しているときに、次のような奇妙なことがわかりました。実行時アサート (条件をチェックし、条件に違反している場合は例外をスローする) は、コンパイル時に条件を評価できる場合に使用されました。
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
明らかに、コンパイラは条件を評価し、効果的に次のいずれかになるコードを置き換えます
assert( true );
何もしない、または
assert( false );
コントロールがその行を通過するたびに例外をスローします。
IMO では、次の理由により、代わりにコンパイル時のアサートを使用する必要がありました。
- コンパイル時に条件違反を早期に公開し、
- よりクリーンな(したがって、より高速で小さい)マシンコードを発行できます
コンパイル時のアサートだけが正しいようです。ここでランタイムアサートを好む理由はありますか?