Grund, eine Laufzeitzusicherung anstelle einer Zusicherung zur Kompilierungszeit zu verwenden?
Während ich die Visual C ++ Codebasis überprüfte, fand ich eine seltsame Sache. Eine Laufzeitzusicherung (die @ iÜberprüfen Sie die Bedingung und lösen Sie eine Ausnahme aus, wenn die Bedingung verletzt wird) wurde in einem Fall verwendet, in dem die Bedingung zur Kompilierungszeit ausgewertet werden konnte:
assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
er Compiler wertet die Bedingung eindeutig aus und ersetzt den Code, der entweder
assert( true );
was macht nichts oder
assert( false );
, der jedes Mal eine Ausnahme auslöst, wenn die Steuerung diese Zeile passiert.
IMO Es sollte stattdessen aus den folgenden Gründen ein Assert zur Kompilierungszeit verwendet werden:
it würde die Bedingungsverletzung früher - zum Zeitpunkt der Kompilierung - und @ verfügbar macheit würde saubereren (also schnelleren und kleineren) Maschinencode ausgeben lassenSieht aus wie ein Assert zur Kompilierungszeit, ist das einzig richtige. Gibt es irgendeinen Grund, hier eine Laufzeitzusicherung zu bevorzugen?