Al revisar la base de código de Visual C++, encontré una cosa extraña. Una aserción de tiempo de ejecución (que es compruebe el estado y lanzar una excepción si la condición es violada) fue utilizado en un caso cuando la condición se pudo evaluar en tiempo de compilación:¿Alguna razón para usar un assert en tiempo de ejecución en lugar de assert en tiempo de compilación?
assert(sizeof(SomeType) == sizeof(SomeOtherType));
claramente el compilador evaluará la condición y vuelva a colocar el código que será efectiva ya sea
assert(true);
que no hace nada o
assert(false);
que arroja una excepción cada vez que el control pasa por esa línea.
OMI una aserción de tiempo de compilación debería haber ser utilizado en lugar por las siguientes razones:
- se expondría a la violación condición anterior - en tiempo de compilación - y
- dejaría limpio (por lo tanto más rápido y más pequeño) código de máquina emitido
Parece que una afirmación en tiempo de compilación es lo único correcto. ¿Hay alguna razón posible para preferir una afirmación en tiempo de ejecución aquí?
Parece una WTF para mí. – egrunin
'assert' por lo general no lanza una excepción, sino que aborta el programa. –
Hasta el momento, no existe una declaración estándar en tiempo de compilación. Ese hecho es bastante importante, especialmente en bases de código antiguas. –