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 lassen

Sieht aus wie ein Assert zur Kompilierungszeit, ist das einzig richtige. Gibt es irgendeinen Grund, hier eine Laufzeitzusicherung zu bevorzugen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage