Lors de l'examen de la base de code Visual C++ j'ai trouvé une chose étrange suivante. Un assert d'exécution (qui est vérifier l'état et jeter une exception si la condition est violée) a été utilisé dans le cas où la condition pourrait être évaluée au moment de la compilation:Une raison d'utiliser un assertion d'exécution au lieu de s'affirmer à la compilation?
assert(sizeof(SomeType) == sizeof(SomeOtherType));
clairement le compilateur évaluera la condition et remplacer le code qui sera effectivement soit
assert(true);
qui ne fait rien ou
assert(false);
qui émet une exception chaque fois que le contrôle passe par cette ligne.
OMI une assert compilation aurait dû être utilisé à la place pour les raisons suivantes:
- il exposerait la violation de l'état plus tôt - au moment de la compilation - et
- il laisserait plus propre (donc plus rapide et plus petit) code machine être émis
On dirait qu'une affirmation à la compilation est la seule bonne chose. Y a-t-il une raison possible de préférer un asserment d'exécution ici?
On dirait un WTF pour moi. – egrunin
'assert' ne lance généralement pas d'exception mais annule le programme. –
Pour l'instant, il n'y a pas d'assertion de compilation standard. Ce fait est assez important, surtout dans les bases de code plus anciennes. –